While - Error

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

While - Error

Beitrag von DieFüchsin »

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?
strazer

Beitrag von strazer »

Verstehe ich das richtig, dass das Objekt animiert werden und sich gleichzeitig bewegen soll?

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);

}
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

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.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

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?
strazer

Beitrag von strazer »

Strazer, dein Tipp funktioniert zwar, aber ich möchte mehrere Objekte gleichzeitig bewegen + animieren und so werden alle nacheinander bewegt.
Ist doch klar, jede weitere while-Schleife blockiert das Skript seperat.
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
  //...
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.
Das meinte er auch nicht. Dein Fehler war
Deine while-Schleife hat jedoch diesen Befehl ganz oft hintereinander ausführen lassen.
Antworten