Spieler rutscht auf Schrägen?

  • Win

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

  • Spieler rutscht auf Schrägen?

    Hi Leute,

    Ich wollte euch mal fragen wie ihr das macht, dass der Spieler auf einer Schräge langsam runterrutscht und man nur langsam hochlaufen kann.
    Der Spieler bleibt immer stehen, wenn man Gesprungen ist.

    Bei mir sieht das dann leider nur so aus:
    Spiel
    GameMakerFile
  • Ich kann mir grad die datei nicht ansehen, aber du könntest 2 variablen definieren; hbrems und vbrems, der eigentliche horizontalspeed ist dann immer hspeed-hbrems und hbrems wird zb 1 wenn place_meeting(x+1,y+1,obj_schräge_rechts).

    Aber das kommt drauf an wie du ihn bis jetzt schrägen rauflaufen lässt. Ich werd den beitrag zu Hause noch editieren, aber nur so als Idee^^

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Also ich löse das ganze zb so:

    GML-Quellcode

    1. if keyboard_check(vk_right) && not place_meeting(x+1,y-1,obj_block)
    2. {
    3. x += 1
    4. if place_meeting(x+1,y,obj_schraeg_R)
    5. {
    6. y -= 1
    7. }
    8. }
    9. if keyboard_check(vk_left) && not place_meeting(x-1,y-1,obj_block)
    10. {
    11. x -= 1
    12. if place_meeting(x-1,y,obj_schraeg_L)
    13. {
    14. y -= 1
    15. }
    16. }
    Alles anzeigen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • berechne die collision der schräge nicht vom sprite, sondern als mathematischer strich. du kannst dann mit collision line, und x y abfragen üerprüfen ob der Spieler die Slope berührt, oder sich sogar rein bewegen wird (dieser code ist aber immer anders, kommt drauf an wie dein movement funktioniert, also kann ich dir keine genauen beispiele geben. der code muss aber nach dem movement, und vor der coordinatenveränderung stattfinden, da du nicht nur die jetzige postion des spielers, sondern auch seine zukünftige berücksichtigen musst). danach änderst du die y verschiebung (oder gleich die position wenn du hspeed und vspeed verwendest) so das der spieler auf der slope ist. das geht recht einfach wenn man die slope als eine simple kurve sieht:

    y = x ist eine 45° slope
    y = 0.5 x ist eine slope die für jede einheit die sie seitlich geht, einen halben höher wird. usw.

    beispiel: nehmen wir an du hast eine 32 pixel grid für deine collisionen. Jetzt hast du eine slope die 64 lang und 32 hoch ist. hierfür würdest du y = 0.5*x; verwenden, da sie doppelt so breit wie lang ist. ( den code natürlich nur aufrufen wenn wirklich eine collision stattfindet!) Falls du verschiebungen für dein movement (eigene variablen die x und y relatiev updaten) verwendest, musst du den code ggf anpassen, oder nach dein coordinaten update packen.

    Um den spieler rutschen zu lassen, musst du sein y wert festelegen, und dann seinen x wert dafür anpassen. also für das beispiel oben: x = 2*y;
  • jap, mit meinem Code und nur der Änderung das place_meeting y+1 ist funktioniert das egal wie die schräge oder slope aussieht solange die kollisionbox precise ist.
    Der Spieler wird dann solange er die Slope berühren würde um 1px hochgesetzt bis er das Konstrukt nicht mehr berührt.
    Ansonsten muss die Slope genauso mit dem Spieler interagieren wie der Boden, also das der Spieler nicht durchfällt und nicht von unten durchspringen kann.

    EDIT: Sonic artiges draufentlanglaufen ist damit aber nicht möglich!

    alternativ:
    wenn du mit speed arbeitest könnte das hinhauen:

    GML-Quellcode

    1. //Kollisionsevent mit Spieler
    2. with(other)
    3. {
    4. x=xprevious; //muss vllt weg, ist eherdazu da, dass wenn die wand zu steil ist, das nix mehr geht.
    5. y=yprevious; //muss vllt weg
    6. if(!place_meeting(x+hspeed,y,other))
    7. {
    8. x+=hspeed;
    9. }
    10. if(!place_meeting(x,y+vspeed,other))
    11. {
    12. y+=vspeed;
    13. }
    14. }
    Alles anzeigen


    musst dich spielen^^

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Benutzer online 1

    1 Besucher