Ich habe dieses Spiel im "Breakeout-Stil".
Ich habe eine Kanone in der Mitte, Blöcke um die Kanone und Pads um die Blöcke. So sieht das Spiel aus:
Ich habe es geschafft, die Kollision pro Pixel zu erhalten, und mein Ball " reflektiert " den Kontakt mit den Blöcken mit der folgenden Mathematik:
Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180;
Dabei ist die blaue Linie die Kugelrichtung und die schwarze Linie (Basislinie) die Blockoberfläche.
Die Richtung ist ein Winkel im Bogenmaß (der natürlich in Grad umgerechnet werden kann).
Der Ball wird bewegt von:
// Event.ENTER_FRAME
x += Math.sin(Direction) * Velocity;
y -= Math.cos(Direction) * Velocity;
So weit, ist es gut.
Mein Problem kommt jetzt mit den Pads (die 3 dunklen und großen Blöcke um die kleinen farbigen Blöcke).
Während sie sich drehen, ändert sich der Oberflächenwinkel.
Darüber hinaus sollte der Ball auch die Seiten treffen. Wie kann ich also die Schlagrichtung und die neue Bewegungsrichtung des Balls messen?
ps : Bei Bedarf kann ich Code und einen spielbaren SWF bereitstellen.
Bearbeiten
Ok, das Problem mit den Winkeln wurde mit Vektoren gelöst , aber ich habe immer noch das Problem mit Seiten- und Rückenkollisionen.
Ich werde dafür eine andere Frage öffnen und sie hier verlinken.