Gegner über Wände und über Lücken springen

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

  • Gegner über Wände und über Lücken springen

    Habe ein kleines Problem, wobei ich vielleicht einen kleinen Denkstoss brauche=>

    GML-Quellcode

    1. state_text='chase';
    2. var dis = distance_to_object(obj_Spieler)
    3. if (dis<=sight_range)/// wenn in sicht, jedoch nicht in Angrifsweite
    4. {
    5. dir = sign(obj_Spieler.x-x);
    6. hspd = dir *2;
    7. /// Hinderniss überqueren nach rechts
    8. if (instance_place(x+1,y,obj_Boden))
    9. {
    10. vspd = -jspd;
    11. }
    12. else
    13. if (instance_place(x-1,y,obj_Boden))
    14. {
    15. vspd = -jspd;
    16. }
    17. else
    18. // Gravity
    19. {
    20. vspd += grav;
    21. }
    22. }
    23. else/// Keine Sichtweite
    24. {
    25. vspd +=grav;
    26. hspd = 0;
    27. state=scr_Artificial_2;
    28. }
    Alles anzeigen


    Dabei habe ich diesen Code, wobei das spezielle ist, dass der Gegner über diese Hindernisse gehen können. Jedoch will ich auch noch einbauen, dass der Gegner über Lücken springen kann. Dabei habe ich es mit dem Code

    GML-Quellcode

    1. if !instance_place(x+1,y+1,obj_Boden)
    2. {
    3. vspd=-jspd
    4. }

    jedoch ist dieser Code schlecht, da dieser ja dann immer ausgeführt wird wenn der Gegner in der Luft ist:/ deshalb frage ich euch, ob ihr eine andere Idee habt, wie ich dies umsetzten könnte.
  • GML-Quellcode

    1. if instance_place(x,y+1,obj_Boden) && !instance_place(x+hspd,y+1,obj_Boden)
    2. {
    3. vspd=-jspd
    4. }


    Davon abgesehen, wäre place_meeting() nicht die bessere Funktion in dem Fall, da du sowieso nicht mit einem Rückgabewert arbeitest? Denke mal dass es ein wenig Performance spart.
  • Ne, instance_place gibt die id der instanz zurück, da du sie aber gar nicht aufgreifst, wäre place_meeting performanter.

    Wenn er nicht hoch genug springt ist entweder jspd zu klein oder die gravitation zu hoch.