Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Zielsuchende Objekte

  Alt 10. Aug 2010, 21:43
Du brauchst erstmal die Richtung, in die sich die Schiffe bewegen sollen - sozusagen einen "Pfeil" der in Richtung der Mitte zeigt (man munkelt Fachleute sollen hier auch von einem "Vektor" sprechen). Diesen Vektor bekommst du ganz einfach:
Delphi-Quellcode:
var
  vx, vy: Double;
begin
  vx := MitteX - MitteSchiffX;
  vy := MitteY - MitteSchiffY;
end;
Nun ist dieser Vektor jedoch für unterschiedliche Schiffe unterschiedlich lang (vergleiche Ecke oben links mit mitte links außen). Du musst den Vektor also normalisieren. Dazu brauchen wir erstmal die Länge des Vektors (entspricht dem Abstand zu Mitte), die einfach mit dem Satz des Pythagoras ausgerechnet werden kann:
Delphi-Quellcode:
var
  laenge: double;
begin
  laenge := sqrt(sqr(vx) + sqr(vy));
  vx := vx / laenge;
  vy := vy / laenge;
end;
Nun kannst du in einem Timer die Schiffe n Schritte an den Pfeil entlangwandern lassen, wobei n die Geschwindigkeit ist (in diesem Fall 10px pro Timerintervall):
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  schiffx := round(schiffx + vx * 10);
  schiffy := round(schiffy + vy * 10);
end;
Um die Schiffe nich miteinander Kollidieren zu lassen musst du auch hier den Abstand zwischen den Schiffen ausrechnen und entsprechend reagieren. Um die Schiffe einige Pixel vor der Mitte zu stoppen, musst du den Abstand zur Mitte berechnen und wenn dieser einen gewissen Wert hat stoppen.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein

Geändert von igel457 (10. Aug 2010 um 21:46 Uhr)
  Mit Zitat antworten Zitat