Einheitliches Bewegen
-
Hallo liebe Com,
Ich Programmiere derzeit spaßenshalber an einer Engine..
Nur ich habe das Problem, dass auf jedem PC das "Spiel" verschieden schnell läuft..( schnellerer Prozessor = schnellere Bewegung ) ..
da habe ich den code ..:
// Nach Vorn Bewegen
if( bKeys[VK_W] ){
fTransZ -= cos(fRotateY * fPi180) / 200 * fRunSpeed;
fTransX -= sin(fRotateY * fPi180 ) / 200* fRunSpeed;
}
// Nach Hinten Bewegen
if( bKeys[VK_S] ){
fTransZ += cos(fRotateY * fPi180) / 200* fRunSpeed;
fTransX += sin(fRotateY * fPi180) / 200* fRunSpeed;
}
// Nach Rechts Bewegen
if( bKeys[VK_D] ){
fTransX += cos(fRotateY * fPi180) / 200* fRunSpeed;
fTransZ -= sin(fRotateY * fPi180) / 200* fRunSpeed;
}
// Nach Links Bewegen
if( bKeys[VK_A] ){
fTransX -= cos(fRotateY * fPi180) / 200* fRunSpeed;
fTransZ += sin(fRotateY * fPi180) / 200* fRunSpeed;
}
// steht wo anders verwendet aber variablen..
glTranslatef( -fTransX, fTransY, -fTransZ );Meine Frage nun: Wie bekomme ich es hin, bei jedem PC gleich schnell zu gehn .. ?
Eine überlegung wäre, es mit time zu machen .. aber wie?
-
Sowas in der Art:
void move(){ static unsigned int timeold = GetTickCount(); unsigned int timenow = GetTickCount(); unsigned int timepassed = timeold - timenow; if (!timepassed) //keine Zeit vergangen -> keine Bewegung passiert return; timeold = timenow; ... // Nach Vorn Bewegen if (bKeys[VK_W]){ fTransZ -= cos(fRotateY * fPi180) / 200 * fRunSpeed * timepassed; //je mehr Zeit vergangen ist, desto mehr Bewegung ist passiert fTransX -= sin(fRotateY * fPi180) / 200 * fRunSpeed * timepassed; } ... }
GetTickCount ist eine Windows-Funktion, wenn du was anderes benutzt musst du die durch eine entsprechende Funktion ersetzen, die dir die Zeit in Millisekunden gibt.
-
GetTickCount() hat nur eine Auflösung von vs. 15ms, was unter Umständen viel zu wenig ist, um verlässlich die seit dem letzten Update vergangene Zeit zu messen. Besser einfach die absolute Zeit nehmen oder eine genauere Methode (z.B. QueryPerformanceCounter())...
-
danke