Tratando de entender los conceptos de establecer velocidad constante en el loop del juego. Me duele la cabeza. Leí el deWiTTERS page, pero no puedo ver el por qué/cómo ... cuando lo tengo ... resbala.Loop basado en tiempo y Loop basado en Frame
while(true)
{
player->update() ;
player->draw() ;
}
Esto funcionará lo más rápido posible según lo rápido que sea un procesador ... Lo entiendo.
Para correr a la misma velocidad en todas las computadoras, la lógica es lo que no entiendo. Si estoy tratando de correr a 60 fps, significa que por cada 16ms los objetos se mueven por un marco, ¿sí? Lo que no entiendo es que el update()
o el draw()
pueden ser demasiado lentos.
deWiTTERS ejemplo (utilicé 60):
const int FRAMES_PER_SECOND = 60;
const int SKIP_TICKS = 1000/FRAMES_PER_SECOND;
DWORD next_game_tick = GetTickCount();
// GetTickCount() returns the current number of milliseconds
// that have elapsed since the system was started
int sleep_time = 0;
bool game_is_running = true;
while(game_is_running) {
update_game();
display_game();
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - GetTickCount();
if(sleep_time >= 0) {
Sleep(sleep_time);
}
else {
// Shit, we are running behind!
}
}
No entiendo por qué se obtiene la hora actual antes de que comience el bucle. Y cuando aumenta en SKIP_TICKS
, entiendo que se incrementa al siguiente intervalo de 16 ms. Pero no entiendo esta parte así:
sleep_time = nextgametick - GetTickCount()
¿Qué significa Sleep(sleep_time)
? El procesador abandona el ciclo y hace algo más? ¿Cómo logra ejecutar 60 fps?
http://msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx – Lucian
http://msdn.microsoft.com/en-us/library/ms724408%28v = vs.85% 29.aspx – Lucian
Gracias, se supone que GetTickCount() regresa entre 10-16ms o menos, ¿sí? Pero, en cambio, estoy viendo cosas como 324505599 como resultado ... ¿Qué significa "La resolución de la función GetTickCount está limitada a la resolución del temporizador del sistema, que normalmente está en el rango de 10 milisegundos a 16 milisegundos", entonces? –