Oyun döngüsünde sabit hızın ayarlanması kavramlarını anlamaya çalışmak. Başım ağrıyor. deWiTTERS page'u okudum, ama neden/nasıl ... anladığımda göremiyorum ... kayıyor. Zaman tabanlı döngü ve Çerçeve tabanlı döngü
while(true)
{
player->update() ;
player->draw() ;
}
Bu
bir işlemci ne kadar hızlı bağlı olarak mümkün olduğunca hızlı çalışacak ... Anladım. Tüm bilgisayarlarda aynı hızda çalıştırmak için, mantık ben alamadım budur. 60 fps'de koşmaya çalışıyorum, o zaman her 16 ms için nesneler bir çerçeve tarafından hareket eder, evet? Ne anlamadığım, update()
veya draw()
'un çok yavaş olabileceğidir.
deWiTTERS örneği (60 ile kullanılır): o döngü başlamadan önce geçerli zamanı alır neden anlamıyorum
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!
}
}
. Ve SKIP_TICKS
tarafından art arda döndüğünde, sonraki 16 ms aralığına artış olduğunu anlıyorum. Ama ben bu bölümü de anlamıyorum: Sleep(sleep_time)
Sleep(sleep_time)
ne anlama geliyor? İşlemci döngüyü terk ediyor ve başka bir şey mi yapıyor? 60 fps ile nasıl çalışır? 60fps'de tek bir kare aralığından daha kısa bir süre içinde tam
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
Teşekkürler, GetTickCount() 10-16ms arasında dönmek ister misiniz evet? Ama bunun yerine sonuç olarak 324505599 gibi şeyler görüyorum ... "GetTickCount işlevinin çözünürlüğü, genellikle 10 milisaniye ile 16 milisaniye arasında olan sistem zamanlayıcısının çözünürlüğü ile sınırlıdır." Demek ne anlama geliyor? –