Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - OnIdle Game Loop - Variable Geschwindigkeit?
Adory - Mi 16.02.11 16:44
Titel: OnIdle Game Loop - Variable Geschwindigkeit?
Hallo,
ich versuche seit längerem ein kleines Jump & Run zu programmieren. Ursprünglich hatte ich mit mehreren ggf. parallel laufenden TTimer-Komponenten für die Spielerbewegung gearbeitet (Einen Timer für links und rechts, einen Timer für die Sprungprozedur bzw. die "Fall"-Prozedur). Dies ermöglichte es mir bspw. die Spielergeschwindigkeit während des Sprungs unabhängig von der Geschwindigkeit für Links/Rechts einzustellen. So, dass die Bewegung nach oben langsamer abläuft, als die Bewegung zu Seite...
So weit so gut. Funktioniert auch super... Der Nachteil: Das Spiel läuft auf verschiedenen Rechnern durch die TTimer-Komponente unterschiedlich schnell. Also musste eine bessere Lösung her.
Habe es nun mit einem OnIdle-Timer mit GetTickCount() versucht. Die Spielerbewegung ist nun auf allen Rechnern gleich, jedoch kann ich ja nunmehr lediglich einen Timer verwenden. Hat jemand eine Idee wie ich dennoch z.B. die Jump-Prozedur verzögert ablaufen lassen könnte? Sleep(x) ist leider keine Option, da ich ja hiermit direkt die ganze Anwendung lahm lege, die anderen Objekte jedoch dieselbe Geschwindigkeit beibehalten sollen.
Meine Idee wäre es vllt. den Timer auf ein Intervall von 1 oder gar 0(?) zu stellen und ggf. während des springens bspw. nur bei jedem 5. oder 10. "Tick" eine Bewegung auszuführen...? Ich bin mir nicht sicher ob das möglich ist (oder gar Sinn macht?). Wenn doch... Wie könnte so eine Abfrage aussehen?
Ich weiß, meine Herangehensweise ist vermutlich ziemlich unprofessionell, aber vllt. hat ja dennoch jemand Lust mir zu helfen? Danke! :)
bummi - Mi 16.02.11 16:52
Du musst ja eigentlich nur wissen wieviele Pixel Du Dich pro Tick bewegen willst, alles mit Doubles (X,Y, dx/Tic, dy/Tic etc.) berechnen und nur zum Zeichen runden, wenn Du nicht GDI+ verwendest.
HenryHux - Mi 16.02.11 16:55
Adory hat folgendes geschrieben : |
Sleep(x) ist leider keine Option, da ich ja hiermit direkt die ganze Anwendung lahm lege, die anderen Objekte jedoch dieselbe Geschwindigkeit beibehalten lassen soll.
|
Versuche es mal mit Delay, legt nicht die ganze Anwendung lahm :
http://www.delphipraxis.net/6620-delay.html
Lg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!