Breakout Collision



  • Hey,

    ich programmiere gerade einen Breakout Clone in C mit der Allegro Bibliothek.

    Ich habe Probleme mit der Kollision zwischen Ball und Bricks.

    Bisher hab ich dies so gemacht:

    Zuerst geprüft ob eine Kollison stattfindet und dann geschaut an welcher Seite des Bricks der Ball kollidiert.

    if ( (ballLeft >= brickRight) )
                    {
                        flipX = TRUE;
                    }
                    else
                    if ( (ballRight <= brickLeft) )
                    {
    
                        flipX = TRUE;
                    }
                    else
                        flipY = TRUE;
    

    Das klappt soweit eigt ganz gut, aber ich hab bemerkt in kommerziellen Spielen dieser Art ist die Kollison irgendwie genauer.
    Weiß zufällig jmd wie diese Spiele die Kollision berechnen oder kann mir jemand einen Rat geben wie man die Kollision genauer berechnen kann ?



  • Wenn du pro Frame den Ball um 10 auf der X-Achse verschiebst und die Wand bei x:25 ist, sieht es so aus:

    0
    10
    20
    30
    20
    10
    ...
    

    Wenn du nun bei einer Kollision ausrechnest wie weit du schon über dem Rand bist und diese Zahl noch von der Position subtrahierst sollte es wiefolgt aussehen:

    0
    10
    20
    20
    10
    

    Das wäre dann korrekt.



  • Danke für die Antwort,

    aber mit Ball & Wand Kollision hab ich keine Probleme.

    Mein Ball bewegt sich max 5 pixel pro frame und da ist das kein problem, dass er in der Wand verschwindet.

    Was ich meinte war, wie kann man die Kollision zw. Ball und Brick noch anders berechnen. Ich hatte schonmal was gelesen, dass man den Ball durch eine Linie ausdrückt und guckt wo die Linie mit dem Brick in berührung kommt. Wenn man die Linie aber von der Mitte des Balls ausgehend berechnet bekommt man Probleme wenn der Ball größer ist und nur an der Seite kollidiert.


  • Mod

    das einfachste waere wohl wenn du genug zwischenschritte einbaust, dann ist die kollision auch sehr genau. statt also z.b. den 50logik durchlaeufen die du pro sekunde machst, dann 500. bei sowas trivialem wie den 3 vergleichen oben wird das nichts ausmachen (edit: was performance angeht).



  • niko2020 schrieb:

    Ich hatte schonmal was gelesen, dass man den Ball durch eine Linie ausdrückt und guckt wo die Linie mit dem Brick in berührung kommt. Wenn man die Linie aber von der Mitte des Balls ausgehend berechnet bekommt man Probleme wenn der Ball größer ist und nur an der Seite kollidiert.

    Wenn du den Mittelpunkt des Balles hast, und seinen Radius kennst ist es doch kein Problem eine "Randkollision" zu errechnen, oder nicht?
    Gerade bei einem Kreis, wo der Radius immer gleich ist.


Anmelden zum Antworten