Einzelnen Beitrag anzeigen

.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#7

Re: Pong - Problem bei der Ballkollision

  Alt 9. Dez 2006, 09:00
OK, das mit onPaint und Invalidate hab ich soweit hinbekommen, flackert jezz sogar viel weniger, aber erst auf ein Bitmap zu zeichnen bekomme ich noch nicht wirklich hin >.<

Und dann zu der Sache mit der Kollision, meinste das so?

Delphi-Quellcode:
//----------------------------------
//BALL BERECHNEN
//----------------------------------
procedure TForm1.Ball_berechnen;
begin
  //Wand angestoßen?
  if Ballposition.Y <= 0 then
    Ballrichtung.Y := -Ballrichtung.Y;
  if Ballposition.Y >= Hoehe then
    Ballrichtung.Y := -Ballrichtung.Y;

  //Spieler angestoßen?
  if ((Ballposition.X <= Spielerposition[1].X + Spieler.Width) AND (Ballposition.Y + Ball.Height >= Spielerposition[1].Y) AND (Ballposition.Y <= Spielerposition[1].Y + Spieler.Height)) OR
     ((Ballposition.X + Ball.Width >= Spielerposition[2].X) AND (Ballposition.Y + Ball.Height >= Spielerposition[2].Y) AND (Ballposition.Y <= Spielerposition[2].Y + Spieler.Height)) then
          Ballrichtung.X := -Ballrichtung.X;

  //Gepunktet?
  //Sp1
  if Ballposition.X <= 0 then begin
    Timer1.Enabled := False;
    Button1.Enabled := True;
  end;
  //Sp2
  if Ballposition.X + Ball.Width >= Breite then begin
    Timer1.Enabled := False;
    Button1.Enabled := True;
  end;

  if Ballposition.X < Spielerposition[1].X + Spieler.Width then
    Ballposition.X := Spielerposition[1].X + Spieler.Width;
  if Ballposition.X + Ball.Width> Spielerposition[2].X then
    Ballposition.X := Spielerposition[2].X - Ball.Width;
  if Ballposition.Y < 0 then
    Ballposition.Y := 0;
  if Ballposition.Y + Ball.Height > Hoehe then
    Ballposition.Y := Hoehe - Ball.Height;


  Ballposition := Point(Ballposition.X + Ballrichtung.X, Ballposition.Y + Ballrichtung.Y);
end;
//----------------------------------

Sorry dass ich das net so schnell versteh

Edit: Mir is grad aufgefallen dass da so noch einige Fehler drin sind, aber generell zu diesem Teil

Delphi-Quellcode:
  if Ballposition.X < Spielerposition[1].X + Spieler.Width then
    Ballposition.X := Spielerposition[1].X + Spieler.Width;
  if Ballposition.X + Ball.Width> Spielerposition[2].X then
    Ballposition.X := Spielerposition[2].X - Ball.Width;
  if Ballposition.Y < 0 then
    Ballposition.Y := 0;
  if Ballposition.Y + Ball.Height > Hoehe then
    Ballposition.Y := Hoehe - Ball.Height;
So meinst du das?

Und dann noch was
Kann man die Kollision nich irgendwie eleganter lösen??? Weil wenn ich hitnerher noch berechnen will, dass wenn der Ball weiter rechts aufprallt er beschleunigt/verlangsamt wird, dann verlier ich mich ja in endlosen IF-Bedigungen...

Hab schon die SuFu dazu benutzt und bin öfter auf so Wurzel und Quadrat Funktionen gestoßen, hab aber echt keinen Plan was ich damit anstellen soll =)
  Mit Zitat antworten Zitat