Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#25

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 17:06
Eine Reflektion an waagerechten oder senkrechten Linien ist eigentlich ganz einfach.
Ein Ball hat in x- und y-Richtung eine bestimmte Geschwindigkeit.
Diese kann positiv oder negativ sein und sollte eine Flieskommazahl (oder Festkommazahl) sein.
Trifft der Ball auf eine senkrechte Wand ändert sich nur die Geschwindigkeit in x-Richtung:
speed_x := speed_x * (-1.0); // bzw. speed_x := -speed_x Bei einer waagerechten Wand gilt das analog für die Y-Geschwindigkeit.
Nur wenn die Reflektionsebene schräg zum Koordinatensystem stehen braucht man die trig. Funktionen.

Hier ungetestet eine Reflektion an einer senkrechten Wand:
Delphi-Quellcode:
// neue Position berechnen
ball_x := Round(ball_x+speed_x);
ball_y := Round(ball_y+speed_y);

// 500 ist der X-Wert der senkrechten Wand
if ball_x > 500 then
begin
  // ball ist quasi nach rechts durch die Wand geschlagen
  // also muss er genau um dieses Stückchen zu viel zurückgespiegelt werden

  ball_x := ball_x - 2 *(ball_x-500); // spiegeln
  
  speed_x := -speed_x; // die neue Geschwindigkeit
end;
Andreas
  Mit Zitat antworten Zitat