Fortbewegung über 'X' oder 'hspeed'?

  • GM 8
  • Fortbewegung über 'X' oder 'hspeed'?

    Hallo!

    Mit der Fortbewegung der Spielfigur bekomme ich immer wieder Schwierigkeiten.

    Ich möchte das sie sich "geschmeidig" bewegt. Dies würde ich am ehesten über hspeed umsetzen.
    Aber dadurch folgt meist eine seltsame Kollision mit den Wänden, an welchen die Spielfigur stehen bleiben sollte.

    Setze ich das ganze aber mit der genauen Angabe der Position fest,

    GML-Quellcode

    1. if(place_free(x+4,y)) then x += 4;

    erzeugt das eine gut berechenbare Bewegung der Figur, aber es ist eben nicht "geschmeidig".
    Ich habe mir schon einige 'platform engines' angeschaut doch diese waren mir meist zu unübersichtlich durch ihre Komplexität.


    Wie würdet ihr das am einfachsten umsetzen?
  • Wenn du wirklich eine "Pixel genaue geschmeidige" Platform engine willst, wird es sicherlich doch etwas komplexer als dein code.
    Ich hab dir hier mal was geschrieben, sollte verständlich sein und funktionieren ;)

    GML-Quellcode

    1. hspd -= hspd / 4; // hspd 'smooth' auf 0 bringen
    2. if (keyboard_check(vk_left)) hspd -= 0.25; // hspd ins negative bringen um sich nach links zu bewegen
    3. if (keyboard_check(vk_right)) hspd += 0.25; // hspd ins positive bringen um sich nach rechts zu bewegen
    4. repeat (abs(hspd)) { // abs(x) bringt den wert ins positive, -7 wird zu 7, 7 wird zu 7, -3 wird zu 3, etc..
    5. if (place_free(x + sign(hspd), y))
    6. x += sign(hspd);
    7. }


    Erstell im Create Event eine Variable hspd für den horizontalen speed.
    :saint:

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

  • Ok das ist schon ganz nützlich :)
    Aber jetzt kommt wieder das nervige Problem mit den Kollisionen an den Wänden.
    Wie bringe ich die Spielfigur nun auch noch "geschmeidig" an die Wände heran?

    Die Figur hängt irgendwie an der Wand als würde die Gravitation abgeschaltet werden. Dies ist aber nicht der Fall.

    EDIT: Wenn ich wie in deinem obigen Code die min.Geschwindigkeit auf 0.25 lasse, taucht kein Problem mit den Kollisionen auf.
    Nur wenn ich es höher "drehe" (auf 2) hängt der Spieler seltsam fest. Es ist aber notwendig da sich das Ding sonst kaum rührt.
  • Benutzer online 1

    1 Besucher