Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Nicht einfallswinkel = ausfallswinkel bei Pong

  Alt 1. Feb 2006, 17:55
Ich an deiner Stelle würde die Verschiebung des Balles mit Sinus und Kosinus erledigen... Braucht man allerdings an kleinen Umweg:

Delphi-Quellcode:
var x,y,angle:Single; //globale Variablen
//Der Winkel ist im Bogenmaß anzugeben...

procedure TForm1.Timer1OnTimer(...);
(...)
begin
(...)
  x:=x+cos(angle);
  y:=y+sin(angle);

  Ball.Top:=Trunc(y); //Es geht auch Round(y)
  Ball.Left:=Trunc(x);
(...)
end;
Und die Sache mit dem Abprallwinkel machst du abhängig davon, wie weit der Ball von der Mitte des Schlägers entfernt aufkommt... zB:

Delphi-Quellcode:
//wir sind in der Timer Prozedur
//Als Beispiel: der Ball kommt von links an den rechten Schläger
  if Ball.Left+Ball.Width=Shape2.Left then begin //Ball trifft Schläger
   if (Ball.Top+Ball.Height>=Shape2.Top) and (Ball.Top<=Shape2.Top+Shape2.Height) then begin
    //Ball ist auf Höhe des Schlägers
    
    //Berechnung des neuen Winkels
    angle:=angle+pi/2*((Shape.Top+Shape.Height/2)-(Ball.Top+Ball.Height/2))/10;
    //Ist jetzt nur ein Beispiel...
   end;
  end;

  //Hier dann die Positionsberechnung von oben
So müsste es in groben Zügen funktionieren... Habs jetzt grad net ausgetestet, du musst aber vermutlich ein bisschen mit den Zahlen rumspielen
Falls du Sin(x) und Cos(x) nicht finden kannst, binde die Math Unit ein...
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat