"Collision_line" -- Problem mit GML-Code

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

  • "Collision_line" -- Problem mit GML-Code

    Ich mache ja gerade ein neues Spiel und hab ein GML-Problem. Hauptsächlich verwende ich noch D&D, aber ein paar sachen muss ich mit GML machen.
    Die Quelle meiner Probleme ist der Gegner ("Enemy_MG"). Dieser kann sich nicht im Room bewegen und schießt die ganze zeit mit Geschossen ("kugel") auf die eigene Spielfigur ("player"). Aber nur, solange dieser sich nicht hinter einer Steinmauer ("Steinmauer_Parent") befindet.
    Kurz: Solange der Player hinter einer Steinmauer in Deckung geht, soll der Gegner nicht schießen.
    Mein Problem: Genau das Gegenteil ist der Fall.

    Hier ist der Code im Step-Event des Gegner-Objekts:
    Spoiler anzeigen

    GML-Quellcode

    1. if collision_line(Enemy_MG.x,Enemy_MG.y,player.x,player.y,Steinmauer_Parent,5,true)
    2. if (shoot_ok == 1)
    3. {
    4. if (global.enemy_shoots == 1)
    5. {
    6. alarm[0] = 2;
    7. instance_create(Enemy_MG.x,Enemy_MG.y,kugel);
    8. global.enemy_shoots = 1;
    9. shoot_ok = 0;
    10. }
    11. }
    Alles anzeigen

    Hinweise:
    Im "Alarm 0" -Event wird die Variable "shoot_ok" auf 1 gesetzt.
    Im "Room start" -Event werden die Variablen "shoot_ok" und "global.enemy_shoots" auf 1 gesetzt.
    Das Objekt "Steinmauer" hat als Parent "Steinmauer_Parent".

    Hab noch ein Bild vom Room mitgeschickt.

    PS: Hab in der Sufu gesucht und hab DIESEN Thread gefunden. Ich würde mein Problem auch mit einer Do-Schleife lösen, wenn ich wüsste, wie das geht. Mit der GM-Hilfe hab ich nämlich nicht rausfinden können wie man die zum Einschrenken vom Sichtbereich von Gegnern verwenden kann.

    Edit: Hab auch schon versucht das letzte Argument in der "collision_line"-zeile auf false zu setzen. Bringt aber überhaupt nix.
    Bilder
    • problem-Bild.jpg

      276,55 kB, 646×505, 165 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Toshiro ()

  • collision_line überprüft, ob eine Kollision auf dieser Linie zwischen 2 Objekten stattfindet. Das einzige was dir fehlt ist ein ! oder ein == false...

    GML-Quellcode

    1. if(!collision_line(Enemy_MG.x,Enemy_MG.y,player.x,player.y,Steinmauer_Parent,true,true))
    2. {
    3. if (shoot_ok == 1)
    4. {
    5. if (global.enemy_shoots == 1)
    6. {
    7. alarm[0] = 2;
    8. instance_create(Enemy_MG.x,Enemy_MG.y,kugel);
    9. global.enemy_shoots = 1;
    10. shoot_ok = 0;
    11. }
    12. }
    13. }
    Alles anzeigen


    Edit: Was soll die 5 im precise parameter?! Ich würde mir es btw. mal angewöhnen, mehrzeilige if Abfragen mit nem Klammernblock zu versehen...wundert mich auch wieder, dass der GM das richtig interpretiert.
  • Okay, danke! Auf das "!" wär ich nich gekommen. Mach soweit es geht alles in D&D. Du bekommst auf jeden Fall einen Eintrag in die Credits!

    Ich würde mir es btw. mal angewöhnen, mehrzeilige if Abfragen mit nem Klammernblock zu versehen

    ja, is ne lästige Angewohnheit :headtouch: