gegner soll sich nach rechts wenden wenn ich hinter ihm bin

  • GM 8

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

  • Wie wäre es mit: read_gm_help(), use_brain() oder learn_gml() ?

    Eine Möglichkeit wäre per place_meeting zu prüfen, ob sich der Spieler an einer bestimmten Stelle (in diesem Fall hinter dem Gegner) befindet.

    Die andere wäre mit point_direction den Winkel zum Gegner zu berechnen (vorausgesetzt der Spieler ist nah genug dran -> point_distance), wodurch sich dann eben ergibt, ob er hinter ihm steht oder nicht.

    Die Umsetzung kannst du ja mal selber probieren.

    Edit: Wenn es sich bei deinem Spiel um einen Platformer handelt würde auch schon die x-Differenz reichen, um den Abstand zum Gegner und die Seite, auf der der Spieler steht (vor dem Gegner oder hinter dem Gegner) herauszufinden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von -$Marvin$- ()

  • ich habe mir mal so ein script gemacht:

    GML-Quellcode

    1. if distance_to_object(instance_nearest(x,y,argument0))<60
    2. {
    3. if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y<y
    4. return true
    5. else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y>y
    6. return true
    7. else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y<y
    8. return true
    9. else if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y>y
    10. return true
    11. else
    12. return false
    13. }
    14. else
    15. return false
    Alles anzeigen

    argument0 ist das object was hinter dir ist
    also muss du das object dem skript mit geben du kannst dann z.B. so abfragen:
    script heißt: skript(also hierbei)

    GML-Quellcode

    1. if skript(obj_gegner)=true
    2. //den code
    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
  • mach ein skript dann musst du eben nur das schreiben:
    in obj_gegner

    GML-Quellcode

    1. if skript(obj_player)=true
    2. //umdrehen

    ist das denn so schwer sowas in einem skript rein zu tun?:
    Spoiler anzeigen

    GML-Quellcode

    1. if distance_to_object(instance_nearest(x,y,argument0))<60
    2. {
    3. if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y<y
    4. return true
    5. else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y>y
    6. return true
    7. else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y<y
    8. return true
    9. else if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y>y
    10. return true
    11. else
    12. return false
    13. }
    14. else
    15. return false
    Alles anzeigen
    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
  • was kommt denn bei //umdrehen rein ?

    habe da sprite_index = enemyright

    ich schilder mal mein problem erneut


    wenn ich links vom gegner bin soll sein sprite_index = enemyleft sein
    und wenn ich rechts vom gegner bin sprite_index = enemyright

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

  • GML-Quellcode

    1. var instance;
    2. instance = instance_nearest(x, y, argument0);
    3. if distance_to_object(instance) < 60
    4. {
    5. if instance.x < x and instance.y < y
    6. return true;
    7. else if instance.x > x and instance.y > y
    8. return true;
    9. else if instance.x > x and instance.y < y
    10. return true;
    11. else if instance.x < x and instance.y > y
    12. return true;
    13. }
    14. return false;
    Alles anzeigen


    Hab den Code mal "verbessert" (ungeachtet davon ob er funktioniert oder nicht) und die vielen redunanten Aufrufe zu instance_nearest zwischen gespeichert.

    #edit:

    wenn ich links vom gegner bin soll sein sprite_index = enemyleft sein
    und wenn ich rechts vom gegner bin sprite_index = enemyright


    In diesem Fallen ist das recht einfach:

    (In :event_step: Step Event von obj_Enemy. Objektnamen anpassen)
    :action_if: x > obj_Player.x
    :action_sprite: enemyright
    :action_else:
    :action_sprite: enemyleft

    bzw. mit GML:

    GML-Quellcode

    1. if (x > obj_Player.x) {
    2. sprite_index = enemyright;
    3. }
    4. else {
    5. sprite_index = enemyleft;
    6. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

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

  • danke ,aber es ist noch nicht fertig :D

    habe nun

    if (x > player.x)
    {
    sprite_index = enemyleft;
    alarm[0]=200
    }
    if (x < player.x)
    {
    sprite_index = enemyright;
    alarm[1]=200
    }


    in step event.Wollte aber mit denn alarmen noch machen das charakter sein sprite in alarm ändern also wurf animation.
    in alarm klappt das nicht weil der step event das überdeckt.

    und wofür war denn das andere kompliziertere code ?
  • das ist klar du brauchst einfach nur eine weitere variable:

    GML-Quellcode

    1. isalarm=false
    2. if (x > player.x)
    3. {
    4. sprite_index = enemyleft;
    5. if isalarm=false
    6. {
    7. alarm[0]=200
    8. isalarm=true
    9. }}
    10. if (x < player.x)
    11. if isalarm=false
    12. {
    13. alarm[0]=200
    14. isalarm=true
    15. }}
    Alles anzeigen

    im alarm musst du dann am ende das schreiben:

    GML-Quellcode

    1. isalarm=false
    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