¿Es seguro usar la función Sleep () en Windows en el bucle de juego (C ++)? Quiero tener una velocidad de fotogramas fija.
¿Es seguro usar la función Sleep () en Windows en el bucle de juego (C ++)? Quiero tener una velocidad de fotogramas fija.
Respuestas:
No, no es. El sueño solo garantiza un tiempo mínimo para dormir, pero en realidad puede dormir por cualquier cantidad de tiempo arbitrario durante ese tiempo. La resolución del temporizador (establecida a través de timeBeginPeriod) también es importante, e incluso si está usando algo más (como QueryPerformanceCounter) para su temporizador, aún necesita timeBeginPeriod para controlar el sueño.
Entonces en resumen:
El único caso razonable para usar Sleep sería si quisieras reducir el uso de CPU para, por ejemplo, dispositivos móviles. Incluso entonces estarías usando Sleep (1); usarlo para controlar la velocidad de fotogramas no es el camino a seguir.
Forzar vsync es probablemente una forma común de obtener una velocidad de fotogramas fija, pero incluso así, se ejecutará un hardware diferente a diferentes velocidades de actualización y no podrá tener una velocidad de fotogramas fija constante en diferentes máquinas (esto depende de qué tipo de hardware estás apuntando, por supuesto).
En este momento es necesario mencionar este artículo: Gaffer On Games - Fix Your Timestep! . Eso describe los pasos que necesita para obtener un paso de tiempo constante en su simulación.
Respuesta corta: no, no lo es.
Para tener una velocidad de cuadro fija, debe llamar a una determinada función de devolución de llamada que fuerza una velocidad de cuadro específica. Obviamente, si no sabe cuánto tiempo durará una sola iteración en un bucle, no puede establecer un tiempo fijo para dormir.
GLUT proporciona glutTimerFunc () , que es, si está programando en OpenGL, la función correcta que necesita. Eche un vistazo a este ejemplo , o este .
Sleep
?