Collisionsfehler - in der Hocke eingeklemmt

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

  • Collisionsfehler - in der Hocke eingeklemmt

    Hallo allerseits

    Ich bin an einem Jump'n'Run-Game am schaffen, aber kommen mit dem Movement in der Hocke zu sein nicht ganz zurecht.
    Wenn man die Down-Taste gedrückt hält geht der Player in die Hocke und kann sich so recht & links bewegen inkl. angepasste Collisionsmaske, so das man zB. in ein Loch kriechen kann, ABER beim Loslassen der Down-Taste und es ist ein Objekt über den Player, bleibt er zwar in der Hocke aber man kann sich nicht von der Stelle bewegen, ausser ich drücke wieder die Down-Taste und bleibe drauf.

    Hier ein Auszug des Script:

    GML-Quellcode

    1. //is Down pressed
    2. if (down) {
    3. mask_index = spr_player_down_mask; //change collisions mask
    4. if (hspd == 0) {
    5. sprite_index = spr_player_down_stand;
    6. image_speed = 0.07;
    7. } else {
    8. sprite_index = spr_player_down_walk;
    9. image_speed = 0.2;
    10. spd = 1.7;
    11. }
    12. } else { // Down isn't pressed
    13. mask_index = spr_player_mask;
    14. if (hspd == 0) {
    15. sprite_index = spr_player_stand;
    16. image_speed = 0.05;
    17. } else {
    18. sprite_index = spr_player_walk;
    19. image_speed = 0.5;
    20. spd = 4;
    21. }
    22. }
    23. if (!down && position_meeting(x, bbox_top-1, Solid)) {
    24. sprite_index = spr_player_down_stand;
    25. if (hspd == 0) {
    26. sprite_index = spr_player_down_stand;
    27. image_speed = 0.07;
    28. } else {
    29. sprite_index = spr_player_down_walk;
    30. image_speed = 0.2;
    31. spd = 1.7;
    32. }
    33. }
    Alles anzeigen


    Und dazu den Horizontal-Collisionscheck inkl. Walk

    GML-Quellcode

    1. //collision checking
    2. if (place_meeting(x+hspd, y, Solid)) {
    3. while (!place_meeting(x+sign(hspd), y, Solid)){
    4. x += sign(hspd);
    5. }
    6. hspd = 0;
    7. }
    8. if (place_meeting(x, y+vspd, Solid)) {
    9. while (!place_meeting(x, y+sign(vspd), Solid)){
    10. y += sign(vspd);
    11. }
    12. vspd = 0;
    13. }
    14. x += hspd;
    15. y += vspd;
    Alles anzeigen


    Hoffe jemand hat eine Idee oder Verbesserungsvorschläge.
    huhu
  • Du könntest beim hoch gehen prüfen, ob über dir ein Block ist. Sonst bleibst du unten.
    Ich hab mir den Code jetzt nicht ganz genau angeschaut, aber du könntest auch zum Beispiel down solange auf true lassen bzw. beim checken, ob die Taste nach unten gedrückt wird, oder über die etwas ist, ist down = true;. Wie du das ganze dann machen würdest wäre aber dann natürlich deine Sache ;)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Danke für den Tipp, aber das mache ich ja auch bereits.
    Ich habe den Skript etwas verschönert und die Variabel is_down hinzugefügt um zwischen aufrecht und hocken zu wechseln.
    Das ding ist jetzt: Ich bin nicht mehr eingeklemmt aber mein Player wechselt im Milisekundentakt von is_down true und false hin und her. Sieht richtig verrückt aus. Wie kann man das besser machen? Irgendwo habe ich eine Lücke in der Programmierungsgrammatik, aber wo?

    GML-Quellcode

    1. ///kriechen
    2. var down = keyboard_check(vk_down);
    3. var is_something_up = position_meeting(x, bbox_top-1, Solid);
    4. if (down) {
    5. is_down=true
    6. } else if (is_something_up && !down) {
    7. is_down=true;
    8. } else {
    9. is_down=false;
    10. }
    11. if (is_down) {
    12. mask_index = spr_player_down_mask; //change collisions mask
    13. if (hspd == 0) {
    14. sprite_index = spr_player_down_stand;
    15. image_speed = 0.07;
    16. } else {
    17. sprite_index = spr_player_down_walk;
    18. image_speed = 0.2;
    19. spd = 1.7;
    20. }
    21. } else {
    22. mask_index = spr_player_mask;
    23. if (hspd == 0) {
    24. sprite_index = spr_player_stand;
    25. image_speed = 0.05;
    26. } else {
    27. sprite_index = spr_player_walk;
    28. image_speed = 0.5;
    29. spd = 4;
    30. }
    31. }
    Alles anzeigen

    huhu

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Brodi ()