Blitz spukt - Funktionen wiederholen sich endlos
Übersicht

![]() |
x-pressiveBetreff: Blitz spukt - Funktionen wiederholen sich endlos |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist nun schon das vierte Projekt, in dem ich dieses Verhalten beobachte: es scheint, als gäbe es einige Ungereimtheiten mit Types, wenn man intensiven Gebrauch davon macht (Erstellen und löschen von vielen Types on-the-fly, Object / Handle / FOR...EACH usw.) Ab einem gewissen Grad tritt dann gerne folgender 'Bug' auf: Blitz fängt an, eine beliebige Funktion aus heiterem Himmel immer wieder in einer Endlosschleife aufzurufen, bis ein Stack Overflow auftritt.
Und das tollste: wenn man das ganze im Debug-Mode reproduzieren will, funktioniert es wieder -die betreffende Funktion wird nur einmal aufgerufen. Es ist immer genau das selbe. Aus heiterem Himmel fängt Blitz irgendwann an, sich in einer Funktion aufzuhängen -oder sie auch doppelt aufzurufen, wobei es sich beim zweiten Aufruf um einen 'ghost call' handelt. Seltsamerweise aber immer, wenn Types / Object / Handle im Spiel sind. Hat jemand dieses Verhalten auch schon mal beobachtet? Woran kann das liegen? Es scheint, als käme Blitz mit der Abarbeitung der Funktionen durcheinander. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein möglichst kurzer Code
der dein Problem reproduziert wäre gut. |
||
solitaire |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ja das Problem - ich nehme an, daß es, wenn Blitz einmal anfängt zu spinnen, gar nicht an einer bestimmten Zeile liegt. Oder kannst du dir folgendes erklären:
Code: [AUSKLAPPEN] Function MoveShip (ShipID% ,xStep#, yStep#, relative% = False) Local Ship.TShip = Object.TShip (ShipID) Local Stage.TStage = Object.TStage( Ship\StageID ) Local i%, x#, y# If relative = True Then EntityParent DummyPiv, Stage\Mesh, 0 PositionEntity DummyPiv, Ship\x, Ship\y, 0 RotateEntity DummyPiv, 0,0,Ship\rotation x = EntityX (DummyPiv,0) y = EntityY (DummyPiv,0) MoveEntity DummyPiv, xStep, yStep, 0 xStep = EntityX(DummyPiv,0) - x yStep = EntityY(DummyPiv,0) - y End If Ship\x = Ship\x + xStep Ship\y = Ship\y + yStep Stage\update = 1 Ship\update = 1 End Function Blitz meldet mir bei dieser Funktion einen Stack Overflow. Die Funktion ruft sich immer wieder selbst auf. Noch seltsamer - wenn ich das billige IF...THEN in der Mitte entferne, tritt der Stack Overflow NICHT auf, die Funktion wird nur einmal abgerufen. Seltsam, nicht? Wie gesagt -das Problem tritt nur auf, wenn man intensiv Types in längeren Codes nutzt. Das es obige Funktion getroffen hat, ist halt nur Zufall. Ich denke nicht, daß es wirklich an der Funktion selbst liegt. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
mag jetzt naiv klingen, aber hast Du deib BB schon mal neu installiert? Vielleicht hat sich einfach ein Fehler "eingenistet".
Ich denke der Fehler wie Du ihn beschreibst ist vollkommen neu, daher wäre es sicher nicht verkehrt solche Fehlerquellen auszuschliessen. Alternativ: gib uns eine Exe die den Fehler produziert damit wir sie testen können. Damit es objektiv und zuverlässig läuft solltest du aber den BB-Code mitliefern zum selbstcompilieren. Mehr fällt mir dazu nicht ein, ich persönlich hatte noch keine solchen Fehler. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist leider nicht so einfach möglich, da das Projekt inzwischen recht komplex ist und viele Includes / Media-Resourcen benötigt.
Ich habe noch ein wenig herumexperimentiert und bin mir nicht mehr 100% sicher, ob es an der Benutzung von Types liegt. Ich denke, daß es (eventuell!) auch auftreten kann, wenn man Entities oft von einem Parent zu einem anderen hin- und herwechselt. Ich habe schon Fälle erlebt, in denen es nach vielen Parent-wechseln nicht mehr möglich war, mittels EntityParent Obj,0 ein Mesh zu "ent-parenten". Und auch das CreateMesh(Parent) nicht immer funktioniert, ist ja bekannt. Vielleicht liegt ja hier der Wurm... *grübel* |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm,
Ich sage, Es liegt an der Übergabe hier: Code: [AUSKLAPPEN] Object.TShip (ShipID) Object.TStage( Ship\StageID ) Ich hatte schon, bei Rezesiven schleifen, das Problem, das ein WErt übergeben werden sollte in der Funktion war er noch 0, nach return war er invinit +Stack overflow fehler. Ich hatte damals, den wert vor der Rückgabe, erst zwischengespeichert, um diesen Bug zu umgehen. Weitere Bugs: Ich hatte bei DX-AS den Bug, das eine .BSP Datei 2x vorhanden war, 1x an die Kamera gehängt (was nciht sein durfte) und 1x richtig. Naja, damals hatte ich eine Kamera erstellt, gelöscht, wieder erstellt und es funktionierte. |
||
between angels and insects |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe den IF-Block aus obigen Code rausgenommen:
Code: [AUSKLAPPEN] EntityParent DummyPiv, Stage\Mesh, 0 PositionEntity DummyPiv, Ship\x, Ship\y, 0 RotateEntity DummyPiv, 0,0,Ship\rotation x = EntityX (DummyPiv,0) y = EntityY (DummyPiv,0) MoveEntity DummyPiv, xStep, yStep, 0 xStep = EntityX(DummyPiv,0) - x yStep = EntityY(DummyPiv,0) - y -Alles funktioniert wieder 100% normal. Es lag also wohl definitiv daran. Irgendetwas darin mag der Compiler -wenn man es oft wiederholt- ganz und gar nicht. Das beunruhigt mich schon sehr -denn WENN ein Compiler erst mal eine Macke hat, weiß man nie, wann und wo das Problem wieder zuschlägt. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Thoem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Bekannter von mir hatte mal das Problem, das sich bei einem von mir Programmierten Leveleditor die Maus selbstängig gemacht hatte. Der Mauszeiger (DrawImage blabla, MouseX(), MouseY()) fuhr selbstständig auf dem Bildschirm herum und löste sogar Klickereinisse aus. Wobei ich aber sicher bin, ob das Problem nicht am Programm lag. Besagter Editor ist schon seit geraumer Weile auf verschiedenen Systemen im Einsatz und dieses Problem trat nur dieses eine Mal auf.
Wer weiss was da los war... |
||
Thoem... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja es wird schon seine gründe haben, warum handle und object nie wirklich eingebunden wurden und geheime befehle waren. Ich vermute, wenn sie immer fehlerfrei funktioniert hätten, hätte mark sie sicher auch offiziell eingebaut.
vielleicht "verläuft" sich die Funktion die aus dem handle den type wieder zurückholen soll irgendwo ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin mir gar nicht mehr so sicher, ob das wirklich mit den Types zu tun hat -inzwischen denke ich eher, daß es am Parenting lag (also, wenn man ein Entity sehr häufig von einem Parent zu einem anderen wechselt).
Seitdem ich diese Stelle rausgenommen habe, klappt wieder alles einwandfrei (der Type-code macht jedenfalls im Moment keine Probleme mehr) - und wenn ich so drüber nachdenke, könnte das mit dem Parenting auch das Problem in den anderen Projekten gewesen sein. Ich habe definitv schon erlebt, das Blitz einen Memory Access meldet, wenn ich ein Entity mit EntityParent Mesh,0 ent-parenten möchte, obwohl das Objekt natürlich existierte. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Diese unerklärlichen , "albernen" Blitzfehler hab ich auch schon beobachtet.
Ganz oft treten (bei mir) Fehler auf, wenn ich Funktionen als Parameter angebe (also den Return-Wert einer Funktion direkt übergeben will). Deshalb speicher ich vieles in lokalen Variablen zwischen. IF..THEN..<komplexere Anweisung mit direkten Funktionsübergaben (s.o.)> ist auch so ein Fall, wo Blitz sich dauernd verschluckt. Mach ich alles in einzelnen Zeilen mit IF..ENDIF, dann klappt alles. Jake |
||
sven123 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja solche Fehler kenne ich auch zu genüge.Aber nach ein bischen herumknuddeln funktioniert dann alles wieder. | ||
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will Fertiges Projekt:Invasion der Heuschrecken |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Apropos IF...THEN: 'komplexere' AND ... OR ... -Verknüpfungen scheinen bei Blitz gar nicht möglich zu sein bzw. werden auch falsch interpretiert. Bin ich schon öfters drüber gestolpert... | ||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Thoem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich nicht bestätigen:
Code: [AUSKLAPPEN] a=1 b=2 c=3 If (a=1 And b=2) Or c=3 Then Print "klappt doch" WaitKey() End das funktioniert... |
||
Thoem... |
Wanderer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist ja noch nicht komplex ![]() |
||
Mai Siehgnätschah gohs hiah. |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also mir ist noch nichts dergleichen passiert! o_O
Finde ich btw. ein starkes Stück das Handle/Object geheim sind. Wer will denn ohne diese beiden Befehle effizient programmieren können? LordChaos @x-pressive: Was geht momentan übrigens auf deiner Homepage ab? o_O Sieht ziemlich komisch aus. |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, ohne Object und Handle geht wirklich nichts mehr -unverzichtbar ![]() @LordChaos: Wieso, was meinst du genau? Ist doch alles wie immer... ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@x-pressive: Er meint sicher das Intro am Anfang... Das war vor einer ganzen Weile noch nicht da, glaube ich. | ||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Wanderer: Mit den Ungereimtheiten bei If-Konstruktionen meinst du bestimmt Sachen wie diese hier:
Code: [AUSKLAPPEN] a = 1 b = 2 c = 35 If a Then Print "A" If b Then Print "B" If c Then Print "C" If a And b Then Print "A und B" If a = 1 And b Then Print "A=1 und B" If a And b = 2 Then Print "A und B=2" If a = 1 And b = 2 Then Print "A=1 und B=2" If a And c Then Print "A und C" If a = 1 And c Then Print "A=1 und C" If a And c = 35 Then Print "A und C=35" If a = 1 And c = 35 Then Print "A=1 und C=35" If b And c Then Print "B und C" If b = 2 And c Then Print "B=2 und C" If b And c = 35 Then Print "B und C=35" If b = 2 And c = 35 Then Print "B=2 und C=35" If a And b And c Then Print "A, B und C" If a And b And c=35 Then Print "A, B und C=35" If a And b=2 And c Then Print "A, B=2 und C" If a And b=2 And c=35 Then Print "A, B=2 und C=35" If a=1 And b And c Then Print "A=1, B und C" If a=1 And b And c=35 Then Print "A=1, B und C=35" If a=1 And b=2 And c Then Print "A=1, B=2 und C" If a=1 And b=2 And c=35 Then Print "A=1, B=2 und C=35" WaitKey() Cls Locate 0,0 Print Right(Bin(a),8) + " A" Print Right(Bin(b),8) + " B" Print Right(Bin(c),8) + " C" Print Right(Bin(a And b),8) + " A und B" Print Right(Bin(a And c),8) + " A und C" Print Right(Bin(b And c),8) + " B und C" Print Right(Bin(a=1),8) + " A=1" Print Right(Bin(b=2),8) + " B=2" Print Right(Bin(a And b And c),8) + " A und B und C" Print Right(Bin(a And b=2 And c),8) + " A und B=2 und C" WaitKey() End Aber guck dir zuerst nur den Code an, den oberen Teil (bis zum ersten Waitkey() ) und überlege dir, wo denn BB überall die IF-Anweisung als Wahr betrachten sollte, dann führ den Code aus. Du wirst staunen ![]() Glaub mir, wenn man das vor Augen hält, kann man 500 Zeichen lange If-Konstruktionen mit etlichen Vergleichsoperatoren basteln, ohne, dass Blitz die Übersicht verliert. MfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Wanderer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und was ist hiermit?
Zitat: a = 1 b = 1 If a = 1 And b = 1 Or a = 1 And b = 2 Then Print "OK!" WaitKey() Man könnte doch meinen, ein OK zu sehen, oder hakt meine Logik? ![]() EDIT: Oi, erst mit Klammern geht's... Zitat: a = 1 b = 1 If (a = 1 And b = 1) Or (a = 1 And b = 2) Then Print "OK!" WaitKey() |
||
Mai Siehgnätschah gohs hiah. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group