AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Achtung die Kurve - mein 1. "großes" Projekt
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von MaToBe · begonnen am 11. Feb 2009 · letzter Beitrag vom 15. Feb 2009
 
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, 22: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz