Spieler bleibt in der Wand hängen

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

  • Spieler bleibt in der Wand hängen

    Hallo miteinander!

    Bastle grade an nem Jump and run und hab n kleines Problem mit meiner Engine.
    Der Spieler bleibt stehen sobald er auf ein solides Objekt trifft, allerdings bringt das nun das Problem mit sich dass wenn ich in der Luft bin und gegen eine Wand steuere, der Spieler einfach an der Wand kleben bleibt.

    Folgender Code ist im mom zur Kollisionsabfrage im Begin Step Event des Spielerobjektes(obj_kevin):

    Quellcode

    1. if(vspeed>0 && not place_free(x,y+vspeed))
    2. {
    3. move_contact_solid(270,vspeed);
    4. vspeed = 0;
    5. if(global.inair==1)
    6. {
    7. sprite_index=spr_kevin_stance1;
    8. alarm[0]=20;
    9. alarm[1]=random(200)+200;
    10. vspeed=0;
    11. gravity=0;
    12. global.inair=0;
    13. global.standing=1;
    14. }
    15. }
    16. if(place_free(x,y+sprite_height/2))
    17. {
    18. gravity=1.5;
    19. if(global.inair==0)
    20. {
    21. sprite_index=spr_kevin_jump;
    22. global.standing=0;
    23. global.walking=0;
    24. global.inair=1;
    25. }
    26. }
    Alles anzeigen


    Im Keyboard Left Event des Spielerobjektes hab ich im Moment

    Quellcode

    1. if(place_free(x-7,y))
    2. {
    3. if(global.standing==1 || (global.walking==1 && image_xscale==-1))
    4. {
    5. x-=7;
    6. sprite_index=spr_kevin_walk;
    7. global.standing=0;
    8. if(global.walking==0)
    9. {
    10. image_xscale=-1;
    11. sprite_index=spr_kevin_walk;
    12. global.standing=0;
    13. global.walking=1;
    14. }
    15. }
    16. if(global.inair==1)
    17. {
    18. x-=9;
    19. }
    20. }
    Alles anzeigen


    Für rechts natürlich dann gerade plus statt minus ne :P .
    Das Problem ist halt auch irgendwie dass ich durch die Art, wie ich die Figur hin- und herbewege keinerlei Verwendung von hspeed habe, dadurch lässt sich dass links/rechts-Bewegen der Figur halt auch nur indirekt verhindern.

    wie verhindere ich dass vspeed auch bei seitlichen Berührungen mit Wände o.ä. auf 0 gesetzt wird?Kann mir jemand weiterhelfen?

    Danke Leute (hab daran echt schon ne Weile rumprobiert, aber nach ner Weile sieht man eben vor lauter Bäumen den Wald nicht mehr!! :headtouch: )
  • Also ich hab mal eine Skizze angefertigt, um dir besser erklären zu können, was ich meine.


    Die Kreuzchen in den Rechtecken stellen die Origins der Bilder dar.

    So...Situation 1 zeigt das ganz normale Landen/Stehen. Man sieht, dass die Beiden Objekt einen bestimmten y-Abstand haben müssen. Diesen musst du ausrechenen/messen.

    In Situation 2 sieht man, dass der Abstand kleiner ist, was bedeutet, dass der Spieler schon nicht AUF dem Objekt stehen kann.

    Folglich musst du einfach irgendwo, bevor du den move_contact und die gravity auf null setzt, überprüfen, ob ein bestimmter y-Abstand, der beiden Objekte festzustellen sind.