instance_destroy() wird nicht ausgeführt

  • GM 8
  • instance_destroy() wird nicht ausgeführt

    Guten Morgen, zusammen,

    ich hab schon sämtliche "gelösten Fragen" durchgearbeitet, aber finde keine Lösung für mein Problem. Ich denke, ich hab es richtig geschrieben, aber die Zeile nach "if" wird einfach nicht ausgeführt, das Objekt nicht gelöscht. Ich sehe den Fehler einfach nicht....

    Zuerst wurde das Objekt mit "instance_create" an einer Position erstellt, funzt auch. Später im Script kommt dann die Anweisung:

    GML-Quellcode

    1. if (instance_exists(obj_sprechblase)=true && (obj_start_ch.image_index=1))
    2. {with(obj_sprechblase) instance_destroy();
    3. sound_stop(bk_alarm1);}

    - und da wird gar nichts ausgeführt. Obwohl beide Bedingungen nachweislich auf "true" stehen. Überhaupt wird dieses "instance_destroy" irgendwie nicht ausgeführt, auch wenn ich es woanders hin setze. Was mache ich denn falsch?
    Hab auch versucht, bei "instance_create" erst eine ID zuzuweisen und dann "with(ID) instance_destroy" zu schreiben - bringt aber auch keinen Unterschied. Wer kann helfen?
    Danke, Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Der Code ist fehlerhaft. Erstens mal sollte er ungefähr so aussehen:

    GML-Quellcode

    1. if (instance_exists(obj_sprechblase) == true && (obj_start_ch.image_index == 1)) {
    2. with(obj_sprechblase)
    3. instance_destroy();
    4. sound_stop(bk_alarm1);
    5. }

    Das mein ich natürlich nich wegen der Ästhetik von wegen Abstände, Absätze usw., sondern Du hattest ein bisschen Chaos in deinen Klammern, siehs Dir nochmal an, und ganz wichtig:
    in der if-Klausel must du immer "==" anstatt "=" verwenden, sonst machste ne Zuweisung und alles geht drunter und drüber.
    (du kannst die "==true" statements auch generell weglassen, also in diesem fall bsp einfach "if (instance_exists(obj_sprechblase) && ...)" schreiben.

    Dennoch bin ich skeptisch obs funzen wird, wegen dem image_index == 1. Soweit ich mich entsinne ist image_index ein float und kommt daher nich immer auf die genauen runden zahlen, du solltest also entweder nach abrund/aufrund-funktionen (womöglich floor() oder round(), sieh mal in der hilfe) schauen oder nen spielraum schaffen mit >= <= statements anstelle von ==, erstere variante wär aber die wesentlich elegantere.
  • in gamemaker kann man eigentlich schreiben wie man will man kann also auch nur = schreiben und die () kann man weglassen:

    GML-Quellcode

    1. if instance_exists(obj_sprechblase) and obj_start_ch.image_index = 1


    also an dem instance_destroy würde ich sagen liegt es nicht irgendwas anderes ist ausschlaggebend

  • Kann es sein, dass obj_start_ch nie image_index 1 erreicht? Wenn der image_speed zb 0.7 ist, wird 1 nicht erreicht. Denn ich nehme an es liegt an der image_index Abfrage. Der Code ist zwar etwas chaotisch, aber definitiv nicht das Problem.

    © 2008 by Teamgrill Productions
  • Erst mal Danke für die Lösungsansätze. Leider trifft keiner davon zu.

    MasterXY schrieb:

    Kann es sein, dass obj_start_ch nie image_index 1 erreicht? Wenn der image_speed zb 0.7 ist, wird 1 nicht erreicht. Denn ich nehme an es liegt an der image_index Abfrage. Der Code ist zwar etwas chaotisch, aber definitiv nicht das Problem.
    Nein, das kann nicht sein, da erstens nicht von speed die Rede ist, sondern von einem image_index und das Objekt hat nur 2 Images und es wird zudem nicht durch Zufallszahlen gewählt. Der index kann also nur 1 oder 0 sein. Hatte auch schon alles überprüft, beide Bedingungen werden erfüllt, wie oben nachzulesen ist.

    Was an dem Code "chaotisch" sein soll, kann ich auch nicht nachvollziehen, da es dem GM ziemlich egal ist, ob man "=true" oder "==true" schreibt - das Ergebnis ist jedenfalls dasselbe. Und die Klammern sind korrekt gesetzt.
    Wenn also noch jemand eine Idee hat, woran es liegen könnte.... An den Bedingungen jedenfalls nicht. *seufz*
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Jep, hab ja vorhin auch schon drauf hingewiesen dass es wohl am image_index-statement liegen dürfte.

    --> Bitte mal im DEBUG-Modus ausführen (F6) und dann bei den variablen gucken was mit der obj_start_ch.image_index so los is, einfach pausieren und step-weise vorwärtsarbeiten.
    Wenn die Variable, wie ich wie gesagt vermute, nie den _exakten_ Wert 1 (alo 1.000000) erreicht, dann liegt hier dein Fehler.
  • Schreib mal dass, und schau welche Meldungen genau kommen:

    GML-Quellcode

    1. if instance_exists(obj_sprechblase) == true
    2. show_message(0);
    3. if obj_start_ch.image_index == 1
    4. show_message(1);
    5. if (instance_exists(obj_sprechblase) == true && (obj_start_ch.image_index == 1))
    6. show_message(2);

    Aber eigentlich sieht der Code korrekt aus.
    Der GM ist im Verhältnis, extrem freizugig was die Syntaxe angeht.
    Es funzen auch befehle aus anderen spprachen, z.B. a := 4;

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Benutzer online 1

    1 Besucher