Gegner Programmieren in GML

  • GM 7

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

  • Gegner Programmieren in GML

    Wir habe folgendes Problem:

    wir haben einen gegner der automatisch auf unseren held schießen sollte, er sollte zuerst prüfen wo unser held steht und je nach dem in die richtige richtung schießen.

    BITTE UM HILFE! :)
  • GML-Quellcode

    1. if distance_to_object(WeiserMagier) < 60
    2. {
    3. if x>WeiserMagier.x then x-=3
    4. else
    5. if x<WeiserMagier.x then x+=3
    6. }
    7. if distance_to_object(WeiserMagier) < 60
    8. {
    9. if y>WeiserMagier.y then y-=3
    10. else
    11. if y<WeiserMagier.y then y+=3
    12. }
    Alles anzeigen


    So mit dem Code hab ich das jetzt mal probiert -

    aber da sind noch paar andere Probleme

    1.) Der Weise Magier wackelt extrem wenn er sich bewegt
    2.) Er kann schief gehen (wie macht man das er nur Waagrecht und Senkrecht gehen kann?)
    ----
    3.) Wie kann man die sprites zu denn verschiedenen Richtungen definieren mit sprite_index funktioniert das bei mir nicht
    4.) Bei einem Abstand von 30 soll er eine Kugel schießen_> hab paar sachen außprobiert aber immer schießt er in alles vier richtungen unendlich kugeln

    für Hilfe wäre ich sehr Dankbar ! ! ! sehr, sehr Dankbar ! ! !
  • game.producers schrieb:

    aber da sind noch paar andere Probleme

    1.) Der Weise Magier wackelt extrem wenn er sich bewegt
    2.) Er kann schief gehen (wie macht man das er nur Waagrecht und Senkrecht gehen kann?)
    ----
    3.) Wie kann man die sprites zu denn verschiedenen Richtungen definieren mit sprite_index funktioniert das bei mir nicht
    4.) Bei einem Abstand von 30 soll er eine Kugel schießen_> hab paar sachen außprobiert aber immer schießt er in alles vier richtungen unendlich kugeln
    zu 1. du könntest z.B. anstatt die Bewegung direkt auszuführen eine Variable machen (oder speed und direction verwenden) und nur jede Sekunde oder so die Richtung wechseln.
    zu 2. einfach in Zeile 7 ein else einsetzen, dann wird der untere Teil nicht ausgeführt, wenn der obere schon ausgeführt wurde.
    zu 3. was genau funktioniert nicht??
    zu 4. wenn er schießt, ein Kugelobject erstellen, und im create event des Objects direction und speed definieren. Dafür solltest du am besten point_direction(self.x,self.y,obj_player.x,obj_player.y) verwenden.

    Sag wenn noch was unklar ist. ^^
  • GML-Quellcode

    1. if distance_to_object(WeiserMagier) < 130
    2. {
    3. {
    4. if x>WeiserMagier.x then {speed = 2.5; direction = 180;}
    5. else
    6. if x<WeiserMagier.x then {speed = 2.5; direction = 0;}
    7. }
    8. {
    9. if y>WeiserMagier.y then {speed = 2.5; direction = 90;}
    10. else
    11. if y<WeiserMagier.y then {speed = 2.5; direction = 270;}
    12. }
    13. }
    14. if distance_to_object(WeiserMagier) > 130
    15. {speed=0}
    Alles anzeigen


    Ok soweit funkt es aber - es kommt aber vor wenn er auf gleicher y höhe wie der magier steht, das er stecken bleibt ^^ also er wechsel jede milisekunde das sprite (oben u. unten)
    und er kann nicht mehr nach links oder rechts gehen, außer man bewegt sich rauf oder runter - hat vielleicht wer eine Idee wie man das lösen könnte?
  • Tut mir leid hab es unverständlich ausgedrückt - Der Gegener verfolgt den Magier korrekt, aber es kommt häufig vor das der Gegner wenn er auf gleicher Höhe wie der Magier ist, ständig zwischen rauf und runter wechsel und dabei einfriert (der Gegner kann sich nicht mehr Bewegen) außer wenn der Held rauf oder Runter geht -

    Please Help ^^

    MfG
  • Hi,

    ich hab das mal getestet. Das "gezappel" kommt daher, das du nur abfragst, wenn x bzw. y größer oder kleiner sind, aber du fragst nicht ab was passiert wenn x = magier.x oder y = magier.y.

    Zu deinem diagonalen laufen Problem, wenn du eh nur 4 richtungen hast und der Gegner ebenso nur so laufen sollen, warum richtest du nicht alles am Grid aus? Für den Gegner erstellst du jedesmal nen Pfad wenn der magier in der Nähe ist. Zudem kann dein Gegner dann auch Objekten ausweichen.

    Sorry ... ich muss erstmal los ...

    Gruß BM
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Hi,

    ich habs damit gelöst:

    GML-Quellcode

    1. position_meeting(x,y,obj)


    Im Anhang noch das Sample. Ich hoffe es hilft dir.

    Gruß BM
    Dateien
    • gegner_test.zip

      (2,05 kB, 180 mal heruntergeladen, zuletzt: )
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Wir haben position_meeting getestet, aber hat nicht so funktioniert wie bei deinem beispiel.

    Deshalb haben wir jetzt unser problem im anhang UPGELOADED.
    !Bitte um Hilfe!
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von game.producers ()

  • Hi erstmal.

    Ehrlich gesagt, ist da so viel sinnloser Quatsch drin (...sorry wenn ich das so schreib), da muss ich erstmal ne menge löschen.

    Warum x verändern wenn Speed und Direction das für dich tun(auf tastenduck)? Warum Stop und zusätzliche spritechange befehle auf tasten release?
    Wofür image_speed? ?(
    Die Y- Ackse ist eine Vertikale Linie, quasi von oben nach unten. Wenn dein Magier hoch oder runter geht wird x erhöht? Für mich nich begreiflich!!!

    Masken für die depth sind ok, aber machen in deinem fall so keinen sinn dann brauchste keine. Wenn du eine Maske erstellst, sollte diese nur den Fuß Bereich abdecken!

    Warum dein grid 4 x 9 ist versteh ich leider auch nicht so recht, aber jeder wie er mag.
    Ggf. liegt hier dein eigentliches Problem, teste ich gleich mal mit.

    Nachdem ich erstmal den ganze "Unrat" bei Seite gepackt habt, zu deinem eigentlichen Problem ... Mist ... muss erstmal los.

    Soweit aber schon mal dein File ... bissi gefixed ... denke durch die verschiedenen Masken ensteht das gezucke... ich schaus mir ggf heute abend noch mal an.

    Gruß BM


    EDIT: Ich hab entdeckt, dass deine Sprites(denke lag am weißen magier strip) irgendwo nen fehler hatten, ich hab alle seperat rausgespeichert und nen komplett neues File erstellt. Du müsstest nun nur wieder deine Room + View Settings ändern, dann kannste weiter ackern(In diesem File!!! um weitere Fehler zu vermeiden!!!).

    Zudem haben irgendwie alle Sprites ne andere Höhe bzw. Breite. Wenn du Sprites im Gamemaker erstellst, bastel erstmal alle Ansichten in einem Sprite(siehe File) dann ist es später leichter zu coden(find ich) und zu checken ob Fehler sind.

    Gutes gelingen

    Gruß BM
    Dateien
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Black-Mask ()

  • Hey,

    haste mein Edit gar nich gelesen? Bzw. das neue File runtergeladen? Ich glaube Edits machen wohl doch nich wirklich Sinn wenn die eh keiner liest. Anyway, anyhow ...

    Gruß BM
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Hallo an alle !

    Ich diesen Thread aufgemacht weil ich ein problem mit meinem Gegner hatte, dies wurde freundlicherweise Black-Mask gefixed!

    Nun hab ich aber wieder ein ähnliches Problem und nach drei Stunden Bug suchen gib ich auf :(

    deshalb wollte ich euch fragen ob ihr vielleich einen fehler endecken könnt - es geht um folgendes:

    Der Gegner verfolgt mich nach x, y und -y perfekt aber nach -x geht er nicht da er den Sprite Vorne und Hinten dauern wechselt und dabei hängt :(

    Könnt ihr mir Helfen den fehler zu finden?

    Das wäre :thumbsup:
    Dateien