Bewegliche Platformen

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

    • Bewegliche Platformen

      Original: Moving Platforms Tutorial
      Autor: Simon Donkers
      Homepage: gamemaker.simondonkers.com/

      übersetzt von Windapple mit Genehmigung von Simon Donkers


      Dieses Tutorial beschreibt das erstellen beweglicher Plattformen, wie z.B. Aufzüge. Zuerst werden horizontale Bewegungen besprochen, danach vertikale. Dieses Tutorial setzt vorraus, das du schon ein Plattformspiel machen kannst. Ein Tutorial darüber befindet sich auf der Game Maker Website.

      Horizontale Plattformen
      Der Trick bei horizontal bewegten Plattformen liegt darin, die Geschwindigkeit der Plattform zu prüfen und die Spielergeschwindigkeit daran anzupassen. Erst musst du prüfen, ob du auf dem Boden stehst:

      GML-Quellcode

      1. if !place_free(x,y+1) then
      2. {
      3. gravity:=0;
      4. vspeed:=0;
      5. }


      Dann musst du überprüfen, ob du auf einer beweglichen Plattform stehst:

      GML-Quellcode

      1. if position_meeting(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      2. sprite_height,object_moving_platform)
      3. {
      4. // irgendein Code
      5. }




      Wie du siehst benutze ich für die X Koordinate: x-sprite_xoffset+sprite_width/2. x-sprite_xoffset bedeutet, das von der linken Seite berechnet wird, auch wenn der Ursprung an eine andere Stelle gesetzt wird. Das sprite_width/2 führt dazu, dass die Position auf die halbe Breite des Sprites gelegt wird. Die X Koordinate ist also mitten im Sprite. Als Y Koordinate siehst du y-sprite_yoffset welche die Oberkannte des Sprites angibt. Wenn wir sprite_height hinzuaddieren sind wir an der Unterkannte. Der Code prüft also letztendlich, ob mittig unter dem Spieler eine Plattform ist.



      Nun muss noch die Bewegunge kommen. Dazu kannst du den hspeed des Spielers auf den des Blockes stellen:

      GML-Quellcode

      1. if position_meeting(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      2. sprite_height,object_moving_platform)
      3. {
      4. objID = instance_position(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      5. sprite_height,object_moving_platform)
      6. hspeed = objID.hspeed;
      7. }
      8. else
      9. {
      10. hspeed:=0;
      11. }
      Alles anzeigen


      Dies prüft auf eine bewegliche Plattform, nimmt ihre ID und setzt hspeed des Spielers auf den hspeed der Plattform.

      Dies erzeugt eine sich horizontal bewegende Plattform.

      Einige Hinweise:

      * Oben muss du object_moving_platform ausfüllen, das muss mit dem Namen der beweglichen Plattform ersetzt werden. Solltest du mehrere mit unterschiedlichen Eigenschaften haben, arbeite mit Parents. Damit kann man das auf alle Plattformen ausweiten.
      * Denke daran die Plattformen solid zu machen!!!
      * Ein wichtiges Details ist es, es unmöglich zu machen zwischen Plattform und Boden zu stecken. Also lass die Plattform bei einer Kollision mit dem Spieler und bei höherer Höhe als dieser sich umkehren:

      GML-Quellcode

      1. if y-sprite_yoffset+sprite_height>other.y-other.sprite_yoffset then
      2. {
      3. other.hspeed:=-other.hspeed;
      4. }

      Dieser Code muss in den Kollisionsevent des Spielers mit der Plattform.
      * Es gibt ein Beispiel mit horizontal und vertikal beweglichen Plattformen, hols dir hier.


      Vertikale Plattformen
      Vertikale Plattformen sind viel schwieriger als horizontale weil es immer das Risiko gibt, in ihnen stecken zu bleiben. Das positive ist, das du dich immer herunterbewegst, das liegt an der Gravitation.

      Für vertikale Plattformen kann man den Code mit einigen Anpassungen verwenden

      GML-Quellcode

      1. if position_meeting(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      2. sprite_height,object_moving_platform)
      3. {
      4. objID = instance_position(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      5. sprite_height,object_moving_platform)
      6. vspeed = objID.vspeed;
      7. }


      Wenn du aber nicht genau über der Plattform stehst wirst du drin stecken bleiben. Wir modifizieren den Code also:

      GML-Quellcode

      1. if position_meeting(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      2. sprite_height,object_moving_platform)
      3. {
      4. objID = instance_position(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      5. sprite_height,object_moving_platform)
      6. vspeed = objID.vspeed;
      7. move_outside_solid(90,sprite_height);
      8. }


      Einige Hinweise:

      * Stelle sicher, das die Plattform nie so nahe an die Decke oder an den Boden kommt, um deine Figur festzufahren.
      * Du musst hier keine genauen Kollisionsprüfungen machen, da der Spieler immer auf dem Plattform stehen bleibt, da die Plattform sich nach unten bewegt und der Spieler sich nach oben.
      * Denke daran die Plattformen solid zu machen!!!
      * Beachte, das der Spieler von der Plattform nicht nach oben springen kann. Um das zu erreichen, muss noch ein bisschen modifiziert werden:

      GML-Quellcode

      1. if position_meeting(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      2. sprite_height,object_moving_platform)
      3. {
      4. objID = instance_position(x-sprite_xoffset+sprite_width/2,y-sprite_yoffset+
      5. sprite_height,object_moving_platform)
      6. vspeed = objID.vspeed;
      7. move_outside_solid(90,sprite_height);
      8. if keyboard_check(vk_up) then
      9. {
      10. vspeed:=-10; //change 10 to the jump speed
      11. }
      12. }
      Alles anzeigen

      * Es gibt ein Beispiel mit horizontal und vertikal beweglichen Plattformen, hols dir hier.


      Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • Da ist doch ne Zeile mit dem Kommentar "//change 10 to the jump speed" wo vspeed 10 zugewiesen wird.
      Da musst du einfach die gewünschte Sprunggeschwindigkeit angeben.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • RE: Bewegliche Platformen

      Original von Windapple

      GML-Quellcode

      1. if !place_free(x,y+1) then
      2. {
      3. gravity:=0;
      4. vspeed:=0;
      5. }



      Anstatt

      GML-Quellcode

      1. place_free(x,y+1)

      ist es besser

      GML-Quellcode

      1. place_free(x,y+1+vspeed)

      zu verwenden, um zu verhindern, daß die Spielfigur im Boden stecken bleibt.

      oder noch besser

      GML-Quellcode

      1. if (vspeed == 0)
      2. {
      3. yy = y + 1;
      4. }
      5. else
      6. {
      7. yy = y + vspeed;
      8. }
      9. if (!place_free(x, yy))
      10. {
      11. code
      12. }
      Alles anzeigen
      Bevor ich nicht ganz sicher bin, sage ich lieber gar nichts. ?(

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von vereiser ()

    • Find ich genial !!
      das habe ich die ganze zeit für mein J'n'R gesucht und
      endlich mal gefunden ...
      bloß verstehe ich nicht was du mit dem Kommentar meinst:

      // irgendein Code

      was ist gemeint ?
      Man prüft ja , ob man auf einer plattform steht
      aber was würde man da für nen Code reinmachen statt dem Kommentar ?

      Edit : sorry , hab wohl das untere überscrollt , habs gefunden
      Der Hammer fällt manchmal vom Tisch.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von EddyZ ()