Spieler bewegt sich nicht

  • GM 8

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

  • Spieler bewegt sich nicht

    Hallo gm-d-Commuity,

    da ich sehr neu im Bereich "Game Maker : Studio" bzw. "GML" bin, habe ich erstmal versucht nachdem mir ein paar Grundkenntnisse begebracht wurden, ein Mini-Jump 'n run zu erstellen. Nun gibt es aber das Problem, dass meine Spielfigur/mein Spieler sich nicht bewegen lässt. Ich kann mich nur durch Sprünge fortbewegen. Das Problem ist allerdings nicht mehr vorhanden, wenn ich die horizontale Collision entferne ... Falls mir da jemand helfen könnte, wäre ich sehr dankbar :D
    Hier ist einmal der Code des "Step-Events":

    GML-Quellcode

    1. if !place_meeting(x+5,y,obj_wall)
    2. if keyboard_check(vk_right) { x += 5 }
    3. if !place_meeting(x-5,y,obj_wall)
    4. if keyboard_check(vk_left) { x -= 5 }
    5. if place_free(x,y+1){
    6. gravity_direction = 270
    7. gravity = 0.5
    8. } else { gravity = 0 }
    9. if vspeed >= 12 then vspeed = 12
    10. if place_meeting(x,y-5,obj_wall) { vspeed = 0 }
    11. if place_meeting(x,y+5,obj_wall) { vspeed = 0 }
    12. if keyboard_check_pressed(vk_space){
    13. if place_meeting(x,y+1,obj_wall)
    14. vspeed -= 10
    15. }
    16. if place_meeting(x,y,obj_outside) { x = 64
    17. y = 96
    18. }
    19. if (instance_number(obj_collect) = 0) { obj_enddoor.visible = true
    20. }
    Alles anzeigen


    MfG - Kevin
    Trust me, i'm an Engineer :thumbsup: :deal:
  • Also mir fällt so mal nichts grundlegend falsches am Code auf, aber vielleicht lässt sich das Problem durch die Syntax beheben.

    GML-Quellcode

    1. if (!place_meeting(x+5,y,obj_wall) && keyboard_check(vk_right) )
    2. {
    3. x += 5;
    4. }
    5. if (!place_meeting(x-5,y,obj_wall) && keyboard_check(vk_left) )
    6. {
    7. x -= 5;
    8. }
    9. //etc...

    das ist übersichtlicher und du kannst dir viele if verschachtelungen sparen, außerdem kommt (mit ich glaub dem nächsten Update) ein "neues" Feature raus, was in allen anderen Programmiersprachen Standart ist, dass wenn du zB zuerst zwei ausdrücke "||/or/oderst" und einer davon gibt false zurück muss er den "&&/and/und" ausdruck nicht mehr auswerten.

    So ich kann keine Garantie geben, dass es jetzt funktioniert, aber oben genanntes^^

    mitunter liegts an irgend einem anderen Kollisionsevent oder an der Kollisionsmaske, das er am Boden stecken bleibt.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Ok, also durch den Zusatz von snap to grid, kannst du dein Problem beheben ohne deinen Bewegungcode großartig abändern zu müssen.

    GML-Quellcode

    1. if place_meeting(x,y-5,obj_wall)
    2. {
    3. vspeed = 0
    4. move_snap(0,32)//kann zB auch 16 sein, einfach mit den werten spielen
    5. }
    6. if place_meeting(x,y+5,obj_wall)
    7. {
    8. vspeed = 0
    9. move_snap(0,32)
    10. }


    das Problem ist, dass sich dein Charakter beim runterfallen, dadurch das er mit iwas zwischen 0.1 und 12 an speed runterfällt, aber nur nach y+1 bzw y+5 abgefragt wird, in den Boden eingräbt und nciht direkt drauf landet. Du kannst auch mit move to contact solid arbeiten. Und vorallem nach vspeed abtasten statt einem steifen wert. denn wenn vspeed 12 ist sollte er nachsehen ob 12 px unter ihm etwas ist und sich nurmehr 11 px nach unten bewegen.
    ich mach das normalerweise mit soetwas zB

    GML-Quellcode

    1. if (place_meeting(x,y+vspeed,obj_simplblock) and vspeed < 0)
    2. {
    3. move_contact_solid(90,-1);
    4. vspeed = 0;
    5. }
    6. if (place_meeting(x,y+vspeed,obj_simplblock) and vspeed > 0)
    7. {
    8. move_contact_solid(270,-1);
    9. vspeed = 0;
    10. }

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