Einzelnen Beitrag anzeigen

Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#16

Re: Achtung die Kurve - mein 1. "großes" Projekt

  Alt 15. Feb 2009, 21:21
Zitat:
Du berechnest irgendwie die neuen Koordinaten
Das mache ich in der Klasse TZaPlayerCalculator in der Funktion Calculate, aber erstmal grundsätzliches zum Aufbau des Programms, sonst ist das glaube ich ziemlich verwirrend :

Die Klasse TZaGame verwaltet das gesamte Spiel, d.h. alle 35 ms. (OnIdle-Ereignis + TAdPerformanceCounter) werden alle Spieler neu berechnet (Positionen + Kollisionsabfrage + Punkte) und alle 30 Durchgänge werden die Eigenschaften auf der rechten Seite neu gezeichnet (DrawPointsPlayer).

Gut. Die Berechnung der Spieler findet in der Klasse TZaPlayerCalculator statt (CalculatePlayer) (Jeder Spieler ist übrigens eine Instanz von TZaPlayer). Jeder Spieler hat eine Geschwindigkeit, die variiert (Items + random).Die Methode TZaPlayerCalculator.CalculatePlayer ruft auch die Methode TZaPlayerCalculator.Calculate auf, in der die Positionen anhand der Gradzahl und Geschwindigkeit berechnet werden. Damit die Kurven nun auch geschwindigkeitsunabhängig gleich scharf gefahren werden können, benutze ich eine Schleife (Die Geschwindigkeit ist in dem Feld TZaPlayer.Speed : Integer gespeichert.
Delphi-Quellcode:
repeat
    if getasynckeystate(APlayer.Keys.Right)<>0 then APlayer.Angle := APlayer.Angle + 2;;
    if getasynckeystate(APlayer.Keys.Left)<>0 then APlayer.Angle := APlayer.Angle - 2;
    inc(SpeedCounter);
// [...]
    FNewCoordinates[Speedcounter-1].X := APlayer.X + FCosinus[round(APlayer.Angle)];
    FNewCoordinates[Speedcounter-1].Y := APlayer.Y + FSinus[round(APlayer.Angle)];
    APlayer.X := FNewCoordinates[Speedcounter-1].X;
    APlayer.Y := FNewCoordinates[Speedcounter-1].Y;
// [...]
    APlayer.Distance := APlayer.Distance + 1;
// [...]
  until SpeedCounter=APlayer.Speed;
Die Koordinaten berechnen sich also ganz leicht mit Sinus und Cosinus. Nun werden alle Koordinaten in dem Array FNewCoordinates zwischengepeichert um später in der Methode TZaPlayerCalculator.Draw gezeichnet zu werden (Diese wird später in der Methode TZaPlayerCalculator.CalculatePlayer aufegrufen).
Hoffe das ist einigermaßen verständlich, aber du musst dich garantiert ein bischen hineinknieen müssen, damit das Spiel später richtig laufen wird. Sobal du das erste Mal die Schlangen sich richtig bewegen siehst ist die Freude aber so groß, dass es sich allemal lohnt.

Gruß und keine Scheu vor weiteren Fragen, Looper
  Mit Zitat antworten Zitat