instance_create loop bricht ab, Hilfe gesucht :D

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • instance_create loop bricht ab, Hilfe gesucht :D

    Guten Abend die Damen und Herren.
    Ich suche hier um Rat, da ich mir folgendes Phänomen nicht erklären kann. Zum Verständnis, ich bin ein Einsteiger und arbeite derzeit an einem einfachem Plattformer.
    In diesem Plattformer gibt es Goomba ähnliche Gegner (rechts-links laufen, bei Sichtkontakt das Feuer eröffnen) die mit Gewehren bewaffnet sind. Wenn sie allerdings beginnen zu feuern,
    geben sie entweder gar keinen Schuss ab, oder hören nach ca 12 Schüssen einfach auf, obwohl die Feueranimation weiter ausgeführt wird.
    Ich habe das erstellen der Kugeln an das abspielen des Sprites geknüpft:

    if sight = true && die = false {
    speed = 0;
    sprite_index = spr_guardsmen_firing;
    image_speed = 1/7;

    if image_index = 2 {
    instance_create(x, y + 13, obj_laser);
    }
    }
    else speed = 2;

    Die feueranimation besteht aus 3 Sprites, die, solange sich der Spieler in der Sichtlinie befindet, geloopt werden.
    Bei jedem zweiten Image sollte dann eine Kugel erzeugt werden, was aber nicht der Fall ist.

    Ich hoffe ihr könnt mir helfen und schon einmal vielen Dank im vorraus!

    Mit freundlichen Grüßen
    Zkiller
  • Sgt.Zkiller schrieb:

    Guten Abend die Damen und Herren.
    Ich suche hier um Rat, da ich mir folgendes Phänomen nicht erklären kann. Zum Verständnis, ich bin ein Einsteiger und arbeite derzeit an einem einfachem Plattformer.
    In diesem Plattformer gibt es Goomba ähnliche Gegner (rechts-links laufen, bei Sichtkontakt das Feuer eröffnen) die mit Gewehren bewaffnet sind. Wenn sie allerdings beginnen zu feuern,
    geben sie entweder gar keinen Schuss ab, oder hören nach ca 12 Schüssen einfach auf, obwohl die Feueranimation weiter ausgeführt wird.
    Ich habe das erstellen der Kugeln an das abspielen des Sprites geknüpft:

    if sight = true && die = false {
    speed = 0;
    sprite_index = spr_guardsmen_firing;
    image_speed = 1/7;

    if image_index = 2 {
    instance_create(x, y + 13, obj_laser);
    }
    }
    else speed = 2;

    Die feueranimation besteht aus 3 Sprites, die, solange sich der Spieler in der Sichtlinie befindet, geloopt werden.
    Bei jedem zweiten Image sollte dann eine Kugel erzeugt werden, was aber nicht der Fall ist.

    Ich hoffe ihr könnt mir helfen und schon einmal vielen Dank im vorraus!

    Mit freundlichen Grüßen
    Zkiller


    Hallo,
    Da du 1/7 an image_speed hast scheint es Rundungsfehler zu geben wobei der image_index nie auf 2 sein wird.
    Für solche Animation-abfragen benutze ich immer image index und eine variable als boolean:

    GML-Quellcode

    1. sprite_index = spr_guardsmen_firing;
    2. image_speed = 1/7; //Da benutze ich immer 0.12 oder 0.20
    3. if (image_index > 2 && shot == false) {
    4. instance_create(x, y+13, obj_laser);
    5. shot = true;
    6. }
    7. else if (image_index > image_number-1) {
    8. shot = false;
    9. }

    Aber auch das hat negative folgen, vor allem wenn die Animation erst nach Schluss der ganzen Animation enden soll.
    Es kann dazu führen, dass der letzte sub-image nicht abspielt und die Animationen abgehackt ausschauen.

    eine Eigene variable kann jedoch eine Lösung sein:

    GML-Quellcode

    1. sprite_index = spr_guardsmen_firing;
    2. image_speed = 1/7;
    3. img_index += image_speed;
    4. if (img_index > 2 && shot == false) {
    5. instance_create(x, y+13, obj_laser);
    6. shot = true;
    7. }
    8. else if (img_index > image_number-1) {
    9. shot = false;
    10. }

    Das funktioniert aber nur wenn die Animation manuell gelooped werden!
  • Sgt.Zkiller schrieb:

    So habe beide Codes ausprobiert und leider keinen Erfolg gehabt. Zwar feuert der Gegner zu 100% und hört nicht mittendrin auf, aber die Geschosse sind ein anhaltender Strahl.

    Die Geschosse zerstören sich nach einer bestimmten Distanz und das ganze findet im Stepevent statt.


    Warte mal, ist das nicht was du wolltest? Sieht gut für mich aus.
  • Du könntest den image speed verkleinern, dann animiert er langsamer.
    Sonst empfehle ich die State-machines, die sind für AI und auch Spieler super nützlich.
    Da kannst du die Schüsse einzeln abgeben. Du hast gesagt das der code mit img_index nicht funktioniert, was genau passiert da?
  • *Ich mische mich mal kurz ein*
    if (image_index > image_number - 1)
    wird nie eintreffen, da image_index max. image_index gleich image_number - 1 wird und nicht drüber geht.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe