FPS y Sleep. Java Game 5
Una debilidad del bucle de animación run() es que su velocidad de ejecución no está restringida para todos los PC. En una máquina lenta su bucle puede ser 20 veces por segundo, en cambio con el mismo código en una máquina rápida puede ser de 80 veces, haciendo que el juego progrese cuatro veces más rápido y tal vez haciendolo injugable. La velocidad de ejecución del bucle debe ser aproximadamente la misma en todas las plataformas, por ello existe una medida popular llamada frames por segundo (FPS), que controla la velocidad a la que avanza la animación.
Para una clase GamePanel, una trama corresponde a un solo paso a través de la función update-render-sleep dentro del bucle run().
Por lo tanto, los 100 FPS deseados implican que cada iteración del bucle debe tomar 1000/100 == 10 ms. Este tiempo de iteración se almacena en la variable de período sleep() y da el tiempo de reposo requerido para mantener el FPS deseado.
Por ejemplo, 100 FPS significan un período de 10 ms, y si los pasos de actualización update/render toman 6 ms, entonces sleep() debería ser 4 ms.
Por supuesto, esto es diferente en cada plataforma, por lo que se debe calcular el tiempo de ejecución.
El siguiente método run() para una clase class GamePanel() incluye el código de temporización y el tiempo de reposo:
timeDiff mantiene el tiempo de ejecución del Update/Render.
Si el update/render toman más tiempo que el especificado, entonces el tiempo de reposo se vuelve negativo. La solución a este problema es ajustar el tiempo a un valor pequeño de sleepTime = 5 para hacer que el hilo duerma un poco.
Pero, ¿qué entendemos realmente por FPS?
El concepto de FPS (frames por segundo) viene definido por la cantidad de imagenes que son mostradas por segundo. En este caso debemos tener en cuenta la relación que existe entre el límite inferior dictado por el ojo humano y la frecuencia crítica de parpadeo, que es la velocidad a la que una luz parpadeante parece ser continua. Esto ocurre entre 10 y 50 Hz, dependiendo de la intensidad de la luz. Para imágenes de mayor tamaño, la posición del usuario en relación con la imagen afecta al parpadeo percibido, así como los contrastes de color y la cantidad de detalle en la imagen.
Las películas se muestran a 24 FPS, pero este número es un poco engañoso ya que cada marco se proyecta sobre la pantalla dos veces (o tal vez tres veces). Así, el espectador está recibiendo 48 (o 72) imágenes por segundo.
Un límite superior para un buen FPS es el valor de la frecuencia de actualización de un monitor, que puede rondar desde los 70 a 90 Hz, por lo tanto el objetivo viene dado en unos 85 FPS.
Para una clase GamePanel, una trama corresponde a un solo paso a través de la función update-render-sleep dentro del bucle run().
Por lo tanto, los 100 FPS deseados implican que cada iteración del bucle debe tomar 1000/100 == 10 ms. Este tiempo de iteración se almacena en la variable de período sleep() y da el tiempo de reposo requerido para mantener el FPS deseado.
Por ejemplo, 100 FPS significan un período de 10 ms, y si los pasos de actualización update/render toman 6 ms, entonces sleep() debería ser 4 ms.
Por supuesto, esto es diferente en cada plataforma, por lo que se debe calcular el tiempo de ejecución.
El siguiente método run() para una clase class GamePanel() incluye el código de temporización y el tiempo de reposo:
timeDiff mantiene el tiempo de ejecución del Update/Render.
Si el update/render toman más tiempo que el especificado, entonces el tiempo de reposo se vuelve negativo. La solución a este problema es ajustar el tiempo a un valor pequeño de sleepTime = 5 para hacer que el hilo duerma un poco.
Pero, ¿qué entendemos realmente por FPS?
El concepto de FPS (frames por segundo) viene definido por la cantidad de imagenes que son mostradas por segundo. En este caso debemos tener en cuenta la relación que existe entre el límite inferior dictado por el ojo humano y la frecuencia crítica de parpadeo, que es la velocidad a la que una luz parpadeante parece ser continua. Esto ocurre entre 10 y 50 Hz, dependiendo de la intensidad de la luz. Para imágenes de mayor tamaño, la posición del usuario en relación con la imagen afecta al parpadeo percibido, así como los contrastes de color y la cantidad de detalle en la imagen.
Las películas se muestran a 24 FPS, pero este número es un poco engañoso ya que cada marco se proyecta sobre la pantalla dos veces (o tal vez tres veces). Así, el espectador está recibiendo 48 (o 72) imágenes por segundo.
Un límite superior para un buen FPS es el valor de la frecuencia de actualización de un monitor, que puede rondar desde los 70 a 90 Hz, por lo tanto el objetivo viene dado en unos 85 FPS.
Comentarios
Publicar un comentario