AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pong - Problem bei der Ballkollision

Ein Thema von .chicken · begonnen am 7. Dez 2006 · letzter Beitrag vom 12. Dez 2006
 
.chicken

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

Re: Pong - Problem bei der Ballkollision

  Alt 9. Dez 2006, 08: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz