FPS y UPS. Aumento de la velocidad del juego. Java Game 7
Si un juego ofrece 50 FPS (es decir, 50 iteraciones run() de animación por segundo), al agregar un nuevo gameUpdate() dentro de run() estará haciendo 100 actualizaciones por segundo, es decir el doble. Este tipo de medición, aparte del FPS, es la denominada UPS.
Este estilo de codificación hace que el juego avance más rápidamente, ya que el estado del juego está
cambiando dos veces más rápido, pero a costa de saltarse la representación de esos estados adicionales. Sin embargo, esto puede no ser notable, especialmente si el valor FPS es 20 o superior.
Una limitación en las altas tasas de FPS es la cantidad de tiempo que la actualización y procesa
Pasos requeridos. Satisfacer un período de 5 ms (1000/5 == 200 FPS) es imposible ya que se necesitan mas pasos para lograr el objetivo en más de 5 ms. La mayor parte de este tiempo de ejecución suele consumirse. En esta situación, la forma de aumentar la velocidad del juego es aumentar el número de UPS. En términos de programación, esto se traduce en llamar a gameUpdate() más de una vez durante cada iteración. Sin embargo, demasiadas llamadas adicionales harán que el juego parpadee, como demasiados estados sucesivos que no se representan.
Para este caso el nuevo run() nos quedará:
Si el update/render toma 12 ms y el período requerido son 10 ms, entonces sleepTime será -2 ms. Este excesivo tiempo de ejecución se añade a la variable excedente, que actúa como un total de todos los rebasamientos por las llamadas de actualización-render.
Cuando el exceso excede el período de iteración se introduce un bucle while, que actualiza el juego por cada período perdido, hasta un máximo de MAX_FRAME_SKIPS (cinco actualizaciones). El tiempo restante de saturación se almacena para su uso en una iteración posterior. El valor MAX_FRAME_SKIPS es arbitrario, pero cuanto mayor es, más repentino será el salto hacia adelante en el juego si el número máximo de los marcos se saltan.
El resultado es que cuando un juego no puede actualizarse y renderizar lo suficientemente rápido para el FPS deseado, entonces se realizarán llamadas adicionales a gameUpdate(). Esto cambia el estado sin procesarlo, lo que el usuario ve como el juego se mueve "más rápido", incluso aunque el número de marcos renderizados sigua siendo el mismo.
Este estilo de codificación hace que el juego avance más rápidamente, ya que el estado del juego está
cambiando dos veces más rápido, pero a costa de saltarse la representación de esos estados adicionales. Sin embargo, esto puede no ser notable, especialmente si el valor FPS es 20 o superior.
Una limitación en las altas tasas de FPS es la cantidad de tiempo que la actualización y procesa
Pasos requeridos. Satisfacer un período de 5 ms (1000/5 == 200 FPS) es imposible ya que se necesitan mas pasos para lograr el objetivo en más de 5 ms. La mayor parte de este tiempo de ejecución suele consumirse. En esta situación, la forma de aumentar la velocidad del juego es aumentar el número de UPS. En términos de programación, esto se traduce en llamar a gameUpdate() más de una vez durante cada iteración. Sin embargo, demasiadas llamadas adicionales harán que el juego parpadee, como demasiados estados sucesivos que no se representan.
Para este caso el nuevo run() nos quedará:
Si el update/render toma 12 ms y el período requerido son 10 ms, entonces sleepTime será -2 ms. Este excesivo tiempo de ejecución se añade a la variable excedente, que actúa como un total de todos los rebasamientos por las llamadas de actualización-render.
Cuando el exceso excede el período de iteración se introduce un bucle while, que actualiza el juego por cada período perdido, hasta un máximo de MAX_FRAME_SKIPS (cinco actualizaciones). El tiempo restante de saturación se almacena para su uso en una iteración posterior. El valor MAX_FRAME_SKIPS es arbitrario, pero cuanto mayor es, más repentino será el salto hacia adelante en el juego si el número máximo de los marcos se saltan.
El resultado es que cuando un juego no puede actualizarse y renderizar lo suficientemente rápido para el FPS deseado, entonces se realizarán llamadas adicionales a gameUpdate(). Esto cambia el estado sin procesarlo, lo que el usuario ve como el juego se mueve "más rápido", incluso aunque el número de marcos renderizados sigua siendo el mismo.
Comentarios
Publicar un comentario