mein script sieht folgendermaßen aus:
(ein inventar object wurde mit einem objct benutzt)
if (baldrian==0){
DisplaySpeech(EGO, "Das m]chte ich im Moment noch behalten."); }
else{ObjectOn(7);
SetObjectView(3, 46);
MoveObjectDirect(3, 70, 108, 2);
while (IsObjectMoving(3)==1) {AnimateObject(3,0,6,1);}
...
Ist das Script bei line 205 angelangt: while (IsObjectMoving(0)==1) {AnimateObject(0,0,6,1);}
kommt folgende Fehlermeldung:
Error: run_text<-dcript1: error -6 (Error (line 205)): Script appears to be hung (150001 while loop iterations without an update)) running function 'object3_a'
was hab ich denn falsch gemacht?
While - Error
Verstehe ich das richtig, dass das Objekt animiert werden und sich gleichzeitig bewegen soll?
Versuche das:
Versuche das:
Code: Alles auswählen
if (baldrian == 0) {
DisplaySpeech(EGO, "Das m]chte ich im Moment noch behalten.");
}
else {
ObjectOn(7);
SetObjectView(3, 46);
AnimateObject(3, 0, 6, 1);
MoveObjectDirect(3, 70, 108, 2);
while (IsObjectMoving(3) == 1) Wait(1);
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Noch zur Erklärung:
AnimateObject(x, y, z, 1) animiert ein Objekt dauerhaft, d.h. der Befehl muss nur einmal ausgeführt werden.
Deine while-Schleife hat jedoch diesen Befehl ganz oft hintereinander ausführen lassen.
Einerseits hat das dazu geführt, dass das Objekt immer wieder auf den ersten Frame der View gesetzt wurde (also nicht tatsächlich animiert wurde).
Andererseits hat die while-Schleife das Spiel blockiert. Folglich hat AGS das Objekt nicht zu den Koordinaten 70, 108 bewegen können. Somit wurde IsObjectMoving(3) nie 0, und die while-Schleife wäre bis in alle Ewigkeit gelaufen, wenn AGS nicht nach 150000 Durchläufen abgebrochen hätte.
AnimateObject(x, y, z, 1) animiert ein Objekt dauerhaft, d.h. der Befehl muss nur einmal ausgeführt werden.
Deine while-Schleife hat jedoch diesen Befehl ganz oft hintereinander ausführen lassen.
Einerseits hat das dazu geführt, dass das Objekt immer wieder auf den ersten Frame der View gesetzt wurde (also nicht tatsächlich animiert wurde).
Andererseits hat die while-Schleife das Spiel blockiert. Folglich hat AGS das Objekt nicht zu den Koordinaten 70, 108 bewegen können. Somit wurde IsObjectMoving(3) nie 0, und die while-Schleife wäre bis in alle Ewigkeit gelaufen, wenn AGS nicht nach 150000 Durchläufen abgebrochen hätte.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Strazer, dein Tipp funktioniert zwar, aber ich möchte mehrere Objekte gleichzeitig bewegen + animieren und so werden alle nacheinander bewegt.
Khrismuc, danke für die Erklärun, ich habs mal mit animateObject(x,y,z,0) probiert, das Spiel hat sich da aber auch aufgehängt.
Nuja ich werd nun die Objecte zu Characteren machen, da passiert die Bewegungsanimation eh gleichzeitig mit der Bewegung. Oder hat noch jemand eine gute Idee?
Khrismuc, danke für die Erklärun, ich habs mal mit animateObject(x,y,z,0) probiert, das Spiel hat sich da aber auch aufgehängt.
Nuja ich werd nun die Objecte zu Characteren machen, da passiert die Bewegungsanimation eh gleichzeitig mit der Bewegung. Oder hat noch jemand eine gute Idee?
Ist doch klar, jede weitere while-Schleife blockiert das Skript seperat.Strazer, dein Tipp funktioniert zwar, aber ich möchte mehrere Objekte gleichzeitig bewegen + animieren und so werden alle nacheinander bewegt.
Wenn du mehrere Objekte bewegen willst, starte zuerst die Bewegung aller Objekte, dann nimm eine einzelne while-Schleife für alle:
Code: Alles auswählen
//...
MoveObjectDirect(0, 10, 30, 2); // fang an Objekt 0 zu bewegen
MoveObjectDirect(1, 20, 40, 2); // fang an Objekt 1 zu bewegen
MoveObjectDirect(2, 30, 60, 2); // ...etc.
MoveObjectDirect(3, 70, 108, 2);
while (IsObjectMoving(0) || IsObjectMoving(1) || IsObjectMoving(2) || IsObjectMoving(3)) Wait(1); // warte bis alle Objekte sich nicht mehr bewegen
//...
Das meinte er auch nicht. Dein Fehler warKhrismuc, danke für die Erklärun, ich habs mal mit animateObject(x,y,z,0) probiert, das Spiel hat sich da aber auch aufgehängt.
Deine while-Schleife hat jedoch diesen Befehl ganz oft hintereinander ausführen lassen.