Immer an der Wand lang

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

  • Immer an der Wand lang

    Entlanggleiten an Objekten
    Da hat mich Copyboy auf die Idee gebracht. Das Skript, was ich in jenem Thread gezeigt habe, schien auf Anhieb super zu funktionieren.

    (Ich habe es später getestet: mit diversen fiesen Unebenheiten, verrückten Sptrite Masks, verschiedenen Geschwindigkeiten, etc. Nur wenn man zu sehr verrückt spielt, tritt das unten beschriebene Problem auf)


    Man kann es sogar noch vereinfachen:

    GML-Quellcode

    1. // argument0: links oder rechts and der Wand lang
    2. // 1: links
    3. // -1: rechts
    4. if place_free(x+lengthdir_x(speed,direction),y+lengthdir_y(speed,direction))
    5. direction+=15*argument0
    6. else direction-=15*argument0


    Leider führt bei meinem Game (mit unebenen Wänden) dieser Ansatz dazu, daß regelmäßig Objekte fasch laufen, d.h. sie drehen sich auf der Stelle im Kreis und / oder "graben" sich dabei in die Wand oder in die Luft.
    Offenbar sind die Unebenheiten der Wand der Grund dafür - dachte ich - und habe alles an Variationen ausprobiert: Wände glätten, Verschiedene Sprite Masks, verschiedene Winkel, schrittweise Erhöhung (wie in dem Code hier) etc. Immer mit dem selben Problem. Das Skript hat eine Chance, zu versagen.

    Jetzt habe ich einen völlig neuen Ansatz versucht und entlang der Wände Wegpunkte generiert, bzw. Pfade gelegt. Relativ aufwändig und gefällt mir auch nicht so gut.

    Mir wäre ein universeller Code wie der oben lieber, auch wenn er komplizierter wird. Jemand von Euch ne Idee?
  • Ich habe mal deinen Code geändert und das mit while Schleifen gemacht:

    GML-Quellcode

    1. // argument0: links oder rechts and der Wand lang
    2. // 1: links
    3. // -1: rechts
    4. i=0;
    5. while ((place_free(x+lengthdir_x(speed,direction),y+lengthdir_y(speed,direction)))&&i<24){
    6. direction+=15*argument0;
    7. i+=1;
    8. }
    9. i=0;
    10. while ((place_free(x+lengthdir_x(speed,direction),y+lengthdir_y(speed,direction))=false)&&i<24){
    11. direction-=15*argument0;
    12. i+=1;
    13. }
    Alles anzeigen

    Das Script hat bei mir bis speed=150 funktioniert.