Seltsamer Fehler bei BreakOut Clon

    Seltsamer Fehler bei BreakOut Clon

    Neu

    Ein herzliches Hey einmal an die Community.

    Da ich nicht wirklich gut Programmieren kann, habe ich mir gedacht ich versuche mich erst einmal an etwas einfachen wie einen BreakOut Clon um die Oberfläche besser kennen zu lernen und um die Programiersprache auch besser verstehen zu können. Jetzt ist mir aber ein nicht nachvollziebarer Fehler unterlaufen, der sich nicht beseitigen lässt. Der Fehler ist leider nicht mit absicht reproduzierbar und tritt nicht immer an der selben stelle auf. Der ball bleibt sehr oft am Rand des schlägers hängen, das dem Spielspaß ein jehes ende bereitet. Am häufigsten tritt der Fehler auf, wen der Schläger die Wand berührt und der Ball genau in der Ecke landet, aber auch so bleibt der Ball ab und zu hängen (siehe Video). Trotz mereren Tutorials im Netz kann ich keinen Fehler finden, der mir passiert ist. Ich habe auch schon mehrere unterschiedliche Varianten, den ball springen zu lassen ausprobiert, leider lässt er sich nicht beseitigen.

    Sicher ist da ein Experte unter euch der den Fehler sofort sieht und mir unter die Arme greift. :)
    youtu.be/cZv6m1mVNh4

    Unter obj_paddle / Create habe ich folgendes was relevant ist:
    Spoiler anzeigen

    Quellcode

    1. ///Variablen
    2. xx = x;
    3. grab = false;
    4. rightLimit = room_width-(sprite_get_width(sprite_index)/2)-60;
    5. leftLimit = (sprite_get_width(sprite_index)/2)+60;
    6. instance_create(x,y-50,obj_paddle_1_hitbox);


    Unter obj_ball / obj_paddle habe ich folgendes das relevant ist:
    Spoiler anzeigen

    Quellcode

    1. direction = 90 + obj_paddle_1.x - x
    2. //move_bounce_all(true);
    3. speed = speed + 0.3
    4. gravity_direction = 270
    5. gravity = 0.003


    Ich schätze mal, das die Hitbox daran schuld sein könnte.
    Spoiler anzeigen
    Create:

    Quellcode

    1. ///Variablen
    2. xx = obj_paddle_1.xx;
    3. grab = false;
    4. rightLimit = obj_paddle_1.rightLimit;
    5. leftLimit = obj_paddle_1.leftLimit;


    Step:

    Quellcode

    1. //wenn die Maus nicht gekclickt wird
    2. if (!mouse_check_button(mb_left))
    3. {
    4. grab = false;
    5. }
    6. if (grab == false)
    7. {
    8. exit
    9. } else
    10. {
    11. //updatet die Koordinaten
    12. if ((mouse_x + xx) > leftLimit) && ((mouse_x + xx) < rightLimit)
    13. {
    14. x = mouse_x + xx;
    15. } else
    16. //legt das linke Ende fest
    17. if ((mouse_x + xx) < leftLimit)
    18. {
    19. x = leftLimit;
    20. } else
    21. //legt des rechte Ende fest
    22. if ((mouse_x + xx) > rightLimit)
    23. {
    24. x = rightLimit
    25. }
    26. }


    PS: GameMaker ver. 1.4.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „wickie“ ()

    Neu

    Wenn der Ball mehr als 90 pixel vom Mittelpunkt entfernt auf den Schläger kommt wird er nach unten abgelenkt bei deiner Formel.
    Besser wäre: 90+(Abstand / (Länge/2))*MaxWinkel


    Zusätzlich könntest du checken ob vspeed>0 ist bevor du den ball nach oben abprallen lässt, so stellst du sicher, dass nach dem abprallen keine weitere Kollision ausgelöst wird, selbst wenn der Ball zuvor (zu) tief in den Schläger eingedrungen sein sollte.