[GM:Studio] Frage zur Kollision, Player glitcht in Wände/Kanten

  • GM 8

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

  • [GM:Studio] Frage zur Kollision, Player glitcht in Wände/Kanten

    Schönen Guten Tag,

    ich und ein paar Freunde sitzen vor einem kleinen Problem beim Game Maker. Und zwar sind wir gerade dabei, uns die Grundzüge draufzuschaffen mittels der GML.
    Ziel ist ein Action Plattformer. Allerdings tauchen dabei Probleme bei der Kollision mit Boden/Plattformen auf. Es ist immer möglich, sich in Ecken "reinzuglitchen" und wir bekommen es einfach nicht weg.
    Wir haben dazu schon diverse Tutorials/Videos durchforstet, aber keine Lösung schafft Abhilfe. Vielleicht ist unser Vorgehen auch komplett falsch?

    Anbei mal der aktuelle Code, der das Problem zwar verringert, aber noch nicht behoben hat.

    Im Create Event:

    Quellcode

    1. // ##################
    2. // Instance Variables
    3. // ##################
    4. i_faceDirection = 0;
    5. i_vSpeed = 0;
    6. // Movement
    7. i_moveSpeed = 2.4;
    8. i_jumpStrength = 8;
    9. // Animation
    10. i_imageSpeed = 0.14;
    11. i_spriteAnimations = 2;
    Alles anzeigen



    Und im Step Event vom Player Object:

    Quellcode

    1. Controls();
    2. // ##########
    3. // Movement
    4. // ##########
    5. i_vSpeed += 0.4;
    6. var w_newHSpeed = 0;
    7. if(global.isPressedLeft) {
    8. w_newHSpeed -= i_moveSpeed;
    9. i_faceDirection = 180;
    10. } else if(global.isPressedRight) {
    11. w_newHSpeed = i_moveSpeed;
    12. i_faceDirection = 0;
    13. }
    14. if( !place_free(x, y + i_vSpeed) ){
    15. if( global.isPressedJump ){ i_vSpeed = -i_jumpStrength; }
    16. }
    17. // ##########
    18. // Colission
    19. // ##########
    20. if( w_newHSpeed != 0 ){
    21. if(!place_free(x + w_newHSpeed, y)) {
    22. if(w_newHSpeed > 0) { move_contact_solid(0, -1); }
    23. else { move_contact_solid(180, -1); }
    24. w_newHSpeed = 0;
    25. }
    26. }
    27. hspeed = w_newHSpeed;
    28. if( i_vSpeed != 0){
    29. if( !place_free(x, y + i_vSpeed) ) {
    30. if(i_vSpeed > 0) { move_contact_solid(270, -1); }
    31. else { move_contact_solid(90, -1); }
    32. i_vSpeed = 0;
    33. }
    34. }
    35. vspeed = i_vSpeed;
    Alles anzeigen


    Steigt da jemand durch und kann uns bei dem Problem behilflich sein?

    vielen Dank.