Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Andorra 2d Billardspiel in 2d

  Alt 27. Jul 2010, 20:57
Nur mal als Denkanstoß:
Warum benützt du nicht Vektoren? Hierzu müsstest du zumindest die Grundrechenfunktionen von Vektoren wissen.

Beispielscode:
Delphi-Quellcode:
type
  TPointF = record
    X, Y: Single;
  end;

{...}

var
  weißeKugel: TPointF;
  weißeKugelGEIST: TPointF;

  weißeKugelRichtungsVek: TPointF;
  weißeKugelGeschwindigkeit: Single;

{...}

function PointF(const cX, cY: Single): TPointF;
begin
  with Result do
  begin
    X := cX;
    Y := cY;
  end;
end;

{...}

weißeKugelRichtungsVek := PointF( weißeKugelGEIST.X - weißeKugel.X, weißeKugelGeist.Y - weißeKugel.Y );
weißeKugelGeschwindigkeit := SQRT( SQR(weißeKugelRichtungsVek.X) + SQR(weißeKugelRichtungsVek.Y) );
weißeKugelRichtungsVek.X := weißeKugelRichtungsVek.X / weißeKugelGeschwindigkeit;
weißeKugelRichtungsVek.Y := weißeKugelRichtungsVek.Y / weißeKugelGeschwindigkeit;

{
- Erläuterung:

  weißeKugelRichtungsVek ist ein auf 1 normierter Vektor (dh. die Länge des Vektors (Pfeiles) beträgt 1)
  weißeKugelGeschwindigkeit ist die Länge des Vektors (also die Länge des Pfeiles)

- Hinweis:

  Wenn du jetzt zB. die Position des Balles ändern willst, müsstest du halt ca. so vorangehen:
    weißeKugel := PointF( weißeKugel.X + weißeKugelRichtungsVek.X * weißeKugelGeschwindigkeit, weißeKugel.Y + weißeKugelRichtungsVek.Y * weißeKugelGeschwindigkeit );
}
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat