Autor Beitrag
Adory
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7
BeitragVerfasst: Mi 16.02.11 16:44 
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! :)


Zuletzt bearbeitet von Adory am Mi 16.02.11 17:00, insgesamt 1-mal bearbeitet
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: Adory
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mi 16.02.11 16:55 
user profile iconAdory hat folgendes geschrieben Zum zitierten Posting springen:
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 :

www.delphipraxis.net/6620-delay.html

Lg

Für diesen Beitrag haben gedankt: Adory
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 16.02.11 18:03 
Du suchst nach Timebased Movement.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."