Unendlich Gegner Direction

  • GM 8

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

  • Unendlich Gegner Direction

    Hallo liebe Game Maker Geminschaft.
    Ich bin dabei ein Spiel zu kreieren indem von einem zu einem anderen Punkt objekte hinfliegen.
    Wenn sie das Ziel erreicht haben wird dem Spieler Leben gezogen.
    Um sich dagegen zu wehren kann der Spieler sich Geschütze kaufen und sie ihrgendwo Platzieren.
    Mein Problem ist Das das Geschütz sich zu dem ihn närsten feindlichen Objekt drehen soll und anschließend schießen.
    Wie kriege ich das hin ?

    Danke im Voraus
  • Du ermittelst zuerst mit instance_nearest die am nächsten gelegene Instanz des Gegners, berechnest den Winkel zu dessen Koordinaten mit point_direction und erstellst eine Instanz des Projektils.

    Was sich etwa so in Code umsetzen lässt (Pseudo-Code):

    GML-Quellcode

    1. nearest_enemy = instance_nearest(x, y, obj_enemy);
    2. if (instance_exists(nearest_enemy)) {
    3. angle_to_enemy = point_direction(x, y, nearest_enemy.x, nearest_enemy.y);
    4. shoot(); // solltest du selbst hinkriegen ;)
    5. }
  • Mit der Funktion

    GML-Quellcode

    1. instance_nearest(x,y,obj) //Gibt die ID der Instanz von Objekt obj zurück, welche am nächsten am Punkt (x,y) ist. obj kann ein Objekt oder das Schlüsselwort "all" sein.

    n xy gibst du die Koordinaten des geschützes ein und bei obj den jeweiligen Gegner(-typ)
    somit hättest du das am nächsten liegende Objekt/Gegner vom geschütz aus.

    der code (in etwa):

    GML-Quellcode

    1. var n,d;
    2. n = instance_nearest(x,y,obj_gegner) ;//nähestes objekt
    3. if (instance_exists(n)) {
    4. d = point_direction (x,y,n.x,n.y);//richtung zum objekt berrechnen
    5. var b;
    6. b = isntance_create(x,y,obj_schuss);//schuss erstellen
    7. b.speed = 2;//schussgeschwindichkeit festlegen
    8. b.direction = d;//schussrichtung festlegen
    9. }


    /Edit: mist. zu spät.

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

  • Danke und Probleme :D

    Erstmal danke für eure schnellen antworten.
    Meine Probleme sind jetzt:
    1.Immer wenn ich obj_gegner mit dem richtigen namen FruitTyp1.obj austausche steht da unknow variable.
    2.Ich kann schlecht die Koordinaten statt x und y eingeben ,wenn der Spieler auswählen kann wo er 1 2 oder 3 Geschütze hinsetzt.

    Ich lade einfach mal eine Datei hoch.
    Danke
    Dateien
    • FruitDown.7z

      (32,18 kB, 106 mal heruntergeladen, zuletzt: )
    1. Bist du dir ganz sicher, dass "FruitTyp1.obj" ein Objekt ist? (Wenn ja, dann benenne es bitte zu "objFruitTyp1" oder ähnlichem um. Ich bin mir nicht ganz sicher wie weit der Game Maker diese nicht-konformen Bezeichnungen zulässt.)
    2. Dies sollte kein Problem darstellen, wenn du den Code z.b. im Create-Event des Geschützturm ausführen lässt.

    PS: Ich hatte bedauerlicherweise keine Möglichkeit deine Projektdatei zu untersuchen.
  • Also dein GMK Beispiel versteh ich nicht so richtig. Da sind keine angesprochenen Geschütze enthalten.?

    Jedenfalls kann das mit "RübeTyp1.obj" schonmal nicht funktionieren da du ein Zeiger "." im Namen hast. (deshalb auch "Unknown Variable") Auch Umlaute oder andere Sprachen außer Englisch ist meiner Meinung nach etwas unprofessionell, aber das ist lediglich meine Meinung. ^^

    Wie erwähnt kannst du mit...

    GML-Quellcode

    1. a = instance_nearest(x, y, obj_gegner);
    2. direction = point_direction(x, y, a.x, a.y);


    ...auf die am wenigsten distanzierte Instanz von obj_gegner verweisen. In a wird hier die ID gespeichert. Mit dem Zeiger "." kannst du nach dem Punkt praktisch die Variablen des gegnerischen Objekts ansprechen. (auslesen oder auch ändern)