Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Delphi Projektarbeit - 2D Autorennen

  Alt 12. Feb 2014, 09:03
Unter Win7 und Win8 sieht es gut aus.

Kannst Du mal grob umreißen, wie Du das aufgebaut hast?
Bild als Hintergrund und wie kontrollierst Du die Strecke und Winkel?
Delphi-Quellcode:
  TCar = Record
           Position : TPosition;
           Richtung : Single;
           Geschwindigkeit : Single;
           Image : TImage;
         end;
Delphi-Quellcode:
  
   TAutoDriveList = Record
                      CarNr : byte;
                      Geschwindigkeit : Single;
                      Richtung : Single;
                      // Besser Position dann ist es Hardware unabhängig (z.b. auf Mac)
                      Wann : TDateTime;
                    end;
Delphi-Quellcode:
Procedure TForm46.MoveCar(Nr:Integer); // Form46 lol...PoC
begin
  Cars[Nr].Position.X := Cars[Nr].Position.X + Sin(Cars[Nr].Richtung*PI/180)*Cars[Nr].Geschwindigkeit;
  Cars[Nr].Position.Y := Cars[Nr].Position.Y + Cos(Cars[Nr].Richtung*PI/180)*Cars[Nr].Geschwindigkeit;
  Cars[Nr].Image.Position := Cars[Nr].Position;
end;
Delphi-Quellcode:
procedure TForm46.Timer1Timer(Sender: TObject);
var
  i : Integer;
begin
  Image5.Canvas.BeginScene;

  Label6.Text := FloattoStr(Image4.AbsoluteRect.Width) +' x '+FloattoStr(Image4.AbsoluteRect.Height);

  if Gas
    then Cars[Stear].Geschwindigkeit := Cars[Stear].Geschwindigkeit + 0.10 // Mehr Gas als Bremse ;-)
    else if Bremse then
           Cars[Stear].Geschwindigkeit := Cars[Stear].Geschwindigkeit - 0.05;

  if Links
    then begin
           Cars[Stear].Richtung := Cars[Stear].Richtung + 3; // Winkelgeschwindigkeit noch gemäßt Geschwindigkeit anpassen
           Cars[Stear].Image.RotationAngle := 90 - Cars[Stear].Richtung;
         end
    else if Rechts then
           begin
             Cars[Stear].Richtung := Cars[Stear].Richtung - 3;
             Cars[Stear].Image.RotationAngle := 90 - Cars[Stear].Richtung;
           end;

  if AutoDrive then
    begin
      // Gespeicherte Daten abspielen
      ...
    end;

    
  for i:=1 to 4 do
    begin
      MoveCar(i);
      CheckCar(i); // todo
    end;
  Image5.Canvas.EndScene;
end;
Quick and Dirty.

Die Daten für die Bewegungen können entweder eingegeben werden per Tastatur,
oder aus dem gespeicherten Array abgespielt werden oder per UDP "rein" kommen.

Mavarik

Geändert von Mavarik (12. Feb 2014 um 13:43 Uhr)
  Mit Zitat antworten Zitat