Tengo un juego de C++ corriendo a través de JNI en Android. La velocidad de fotogramas varía de aproximadamente 20-45 fps debido a la complejidad de la escena. Cualquier cosa por encima de 30 fps es una tontería para el juego; solo quema la batería. Me gustaría limitar la velocidad de cuadros a 30 fps.¿Cómo limitar la velocidad de cuadros al usar GLSurfaceView.RENDERMODE_CONTINUOUSLY de Android?
- pude cambiar a RENDERMODE_WHEN_DIRTY, y utilizar un temporizador o ScheduledThreadPoolExecutor a requestRender(). Pero eso agrega un lío completo de partes móviles adicionales que pueden funcionar o no de manera consistente y correcta.
- Intenté inyectar Thread.sleep() cuando las cosas se están ejecutando rápidamente, pero esto no parece funcionar en absoluto para valores de tiempo pequeños. Y de todos modos puede estar respaldando eventos en la cola, sin detenerse.
¿Hay un método "capFramerate()" escondido en la API? ¿Alguna forma confiable de hacer esto?
Nice Fili! Estoy un poco avergonzado de haberlo echado de menos, pero tu enfoque funciona bien. Gracias. – grinliz
Con este código, no tiene un FPS constante. En mi juego, yo oscilar entre 30 y 20 fps. El método real es una llamada de EGL eglSwapInterval pero no está implementado en dispositivos Android. – Ellis
@Ellis: es extraño, he usado este código en juegos comerciales y tengo un FPS constante. También asegúrese de que cuando mida FPS, debe hacer una media de los últimos 5-10 cuadros, por ejemplo, para eliminar cualquier irregularidad (a veces el teléfono realiza algunas tareas en segundo plano, como recibir cosas, consultar correo, etc.). – Fili