Wie macht man am Besten einen Gameloop?
-
Hi!
Ich bastel gerade spaßeshalber an einem Super Mario Clone. Habe alles mit Klassen gemacht, sprich Mario selbst und die Weltobjekte sind klassen.Ich möchte nun, dass man Mario auf Knopfdruck bewegen kann. Ich habe da schon was in der Faq gefunden, wie man Mario mit 30pixel pro sekunde laufen lassen könnte:
s = Sekunde
p = PixelIch Messe an jedem Ende von WM_PAINT die aktuelle Zeit um herrauszufinden wie lange es dauert um einen Frame zu berechnen.
Ist GetTickCount() - iLastGetTickcount = 15, rechne ich also:
15/1000 = 0,015s
Mario.Xpos += 30p*0,015s = 0,45pFrage: Wie kann ich das am Besten in einem loop realisieren? Meint ihr ein Thread wäre hier angebracht? Hab es schon mit einem Timer versucht, der jede Milisekunde einen Tick macht. Das Resultat ist 15ms pro Frame, was ich etwas langsam finde, da es umgerechnet etwa 50fps entspricht.
So sieht das Ganze im moment aus.

http://img305.imageshack.us/img305/7691/smc9nf.jpg
-
woah? vergiss timer <= eine halbe sec. was du brauchst ist in der winmain ne programmschleife, keine Windowsmessages, da wirst du nichts flüssiges hinbekommen.
-
Perner schrieb:
Meint ihr ein Thread wäre hier angebracht?
Nein.
Bye, TGGC (You don't get it and never will)
-
Habs hinbekommen. Ich lasse jetzt einfach meinen Dialog in einem Thread laufen und lasse ne Schleife in der Winmain laufen, die ständig die Physik und Grafik berechnet, bis der Thread beendet wurde.

-
Dialog?
-
Ja, ich lasse das ganze auf nem Dialog laufen.
Hier ein Bild:
http://img284.imageshack.us/img284/5521/q17vt.jpgIch habe diesen Dialog als Ressource erstellt und lade ihn mit dem DialogBox() Macro.
-
no offense, aber wie ich immer sage: wenn man es nicht ordentlich hinbekommt, nimmt man nen thread.

rapso->greets();
-
Wo ist das Problem? Durch den Dialog kann der Stack nicht überlaufen und alle sind glücklich.

Was habt ihr eigentlich alle gegen Threads?
-
Perner schrieb:
... Durch den Dialog kann der Stack nicht überlaufen ...

-
Perner schrieb:
Was habt ihr eigentlich alle gegen Threads?
Wirklich Thread-Safe zu programmieren ist nicht so ohne. Threads haben schon ihre Berechtigung (z.B. Nachladen von Terraindaten bei richtig großen Terrains), aber hier? Ich glaube, Du bist der erste, der für eine simple Gameschleife einen Thread verwendet.

Warum nimmst Du nicht eine simple Schleife, in der Du am Ende immer die Schleifenlaufzeit ermittelst und mit diesem Wert dann einfach die Bewegung berechnest? Also einfach:
position += speed * deltaTime;
Gruß - Xaron
-
Xaron schrieb:
Threads haben schon ihre Berechtigung (z.B. Nachladen von Terraindaten bei richtig großen Terrains)
wenn man mehrere cpus hat. sonst bringt es garnichts außer dass man nicht selbst denken muss und ein wenig verschleisszeit... genau wie bei dem gameloop hier *tztz*
rapso->greets();