¿Cuál es la mejor manera de lidiar con una situación que puede surgir, en la que un usuario tiene dos o más monitores con diferentes resoluciones e intervalos de sincronización vertical?
Esto se aplicaría cuando un juego tiene un intervalo de tiempo fijo y se ejecuta en modo de ventana: si un monitor tiene una velocidad de fotogramas de 60.056 y el otro tiene una velocidad de fotogramas de 59.94, la sincronización vertical finalmente no hará su trabajo, si la ventana del juego se mueve de la pantalla principal a otra.
También se producirá un alias temporal, ya que el paso de tiempo no está sintonizado adecuadamente con la otra velocidad de sincronización. ¿Cómo suelen los juegos lidiar con este problema, si es que lo hacen?
n
en menos deO(n)
complejidad (óptimamenteO(1)
), entonces nada de lo que dije se aplica. Sin embargo, las simulaciones interactivas no tienden a funcionar así.Respuestas:
Los pasos de la lógica del juego no tienen que estar sincronizados con la lógica de la pantalla, incluso si está utilizando un paso de tiempo fijo.
Considere un gameloop como:
Realmente no importa cuánto demoren sus
draw()
llamadas. Mientras sudo_step()
toma menostime_per_step
, su lógica de juego no se quedará atrás.fuente
X
cuadros lógicos por segundo enY
cuadros gráficos por segundo,X != Y
tendrá que hacer que la lógica se mantenga en los gráficos (cuadros repetidos y descartados) o los gráficos se mantengan en la lógica (desgarro). La otra alternativa es forzar la lógica para que se ejecute a la velocidad de los gráficos, lo que conducirá a un alias temporal. No hay ciencia espacial aquí.