Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.432 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Pong programmieren

  Alt 15. Dez 2010, 09:34
Es arbeitet sich wesentlich besser mit einem Geschwindigkeitsvektor als mit dem Winkel
(Geschwindigkeit in x- und y-Richtung in zwei verschiedenen Variablen).
Delphi-Quellcode:
TGeschwindigeit: record
  dx, dy: Double;
end;

procedure derBall.Bandenkollision;
begin
  Geschwindigkeit.dy := -Geschwindigkeit.dy;
end;

procedure derBall.Schlägerkollision;
begin
  Geschwindigkeit.dx := -Geschwindigkeit.dx;
end;

function derBall.bewegt_sich_nach_links : Boolean;
begin
  Result := (Geschwindigkeit.dx < 0);
end;

function derBall.bewegt_sich_nach_rechts : Boolean;
begin
  Result := (Geschwindigkeit.dx > 0);
end;

function derBall.bewegt_sich_nach_oben : Boolean;
begin
  Result := (Geschwindigkeit.dy < 0);
end;

function derBall.bewegt_sich_nach_unten : Boolean;
begin
  Result := (Geschwindigkeit.dy > 0);
end;

procedure derBall.bewegeDich;
begin
  XKoordinate := XKoordinate + Geschwindigkeit.dx;
  YKoordinate := YKoordinate + Geschwindigkeit.dy;
end;
Zum eigentlichen Problem:
Delphi-Quellcode:
  //Kollisionssystem von Schlaeger1
    if derBall.bewegt_sich_nach_links then
    begin
      If (derBall.XKoordinate >= Schlaeger1.XKoordinate)
      and (derBall.YKoordinate >= Schlaeger1.YKoordinate)
      and (derBall.YKoordinate <= (Schlaeger1.YKoordinate+Schlaeger1.Breite)) then
      begin
        derBall.Schlaegerkollision;
      end;
    end;

    //Kollisionssystem von Schlaeger2
    if derBall.bewegt_sich_nach_rechts then
    begin
      If (derBall.XKoordinate >= Schlaeger2.XKoordinate)
      and (derBall.YKoordinate >= Schlaeger2.YKoordinate)
      and (derBall.YKoordinate <= (Schlaeger2.YKoordinate+Schlaeger2.Laenge)) then
      begin
        derBall.Schlaegerkollision;
      end;
    end;

    //Kollisionssystem von den Aussenwänden
    If derBall.bewegt_sich_nach_oben then
    begin
      if derBall.YKoordinate <= dasFeld.gibYKoordinate then
      begin
        derBall.Bandenkollision;
      end;
    end;

    //Kollisionssystem von den Aussenwänden
    if derBall.bewegt_sich_nach_unten then
    begin
      If derBall.YKoordinate >= (dasFeld.gibYKoordinate+dasFeld.Laenge) then
      begin
        derBall.Bandenkollision;
      end;
    end;
  Mit Zitat antworten Zitat