Winkelberchnung bei Pong-Clone

alixander

Mitglied
Hi Leute!
Ich versuche grad mal ein Pong-Clone mit DirectDraw zu erstellen.
Ich weiß nicht genau wie ich das mit dem Abprallen des Balls an den Schlägern berechnen soll- Also mir fällt da immer nur folgendes ein: Einfallswinkel = Ausfallwinkel, aber das ist doch sicherlich bei so einem game ziemlich langweilig, oder? Hat einer von euch vielleicht auch schon mal so ein Game gemacht und kann mir nun mit der Berchnung es Winkels helfen-
mfg alixander
 
Hi,

ich habe so etwas schon ein paarmal gemacht (obwohl es nicht unbedingt eine C-spezifische Frage ist und vielleicht besser im Coders-Talk aufgehoben wäre).

Einfallswinkel = Ausfallswinkel ist schon korrekt, aber man kann natürlich Variationen einbauen; z.B. die Geschwindigkeit des Schlägers auf den Winkel Einfluss nehmen lassen. Vergleiche die Position des Schlägers beim Aufprall mit der Position bei der letzten Aktualisierung und rechne den Wert in den Winkel ein. Zusätzlich kann man dem Ball auch eine Rotation verpassen (die nicht sichtbar sein muss), die sich ebenfalls auf den Abprallwinkel auswirkt. Hier bietet sich auch wieder die Schlägergeschwindigkeit an, wobei die Rotation bei jedem Aufprall auf eine Fläche um einen "Reibungswert" reduziert werden kann.

Gruß

P.S.: Unrechnung von Winkeln/Geschwindigkeiten in kartesische Vektoren und umgekehrt:
Code:
dx = speed * cos(angle);
dy = speed * sin(angle);

speed = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
angle = Math.atan(dy / dx);
 
Zuletzt bearbeitet:
Also ich würd da nicht viel mit Winkeln rumrechnen... die Geschwindigkeit des Balls ist ganz einfach ein zweidimensionaler Vektor. Wenn der Ball an einem vertikalen Hindernis abprallt, änderst du nur das Vorzeichen der x-Komponente des Geschwindigkeitsvektors, für horizontale Hindernisse entsprechend die y-Komponente.

Wenn man jetzt noch die Paddle-Stellung einfließen lassen will, dann vielleicht so:
  • Trifft der Ball genau in der Mitte des Paddles auf, ändert sich weiter nichts.
  • Je weiter der Ball beim Aufprall von der Mitte des Paddles entfernt ist, desto weiter die Ablenkung.
  • z.B. BallGeschwindigkeit.y += Ball.y - PaddleMitte.y

Wollte das nur als Alternative anführen, gegen Datics Vorschlag ist eigentlich nichts einzuwenden :)

(obwohl es nicht unbedingt eine C-spezifische Frage ist und vielleicht besser im Coders-Talk aufgehoben wäre)

Allerdings :)
 

Neue Beiträge

Zurück