Constant FPS Android OpenGLES

Hola desarrolladores de Android,

Estoy desarrollando un juego simple para Android en Eclipse usando OpenGLES 1.0. Estoy utilizando Samsung Galaxy S2 Android (2.3) como dispositivo para el desarrollo.

Y tengo una pregunta sobre el doble núcleo y la constante de velocidad de cuadros.

Así que me las arreglé para crear GLSurfaceView y anular la función onDrawFrame () donde llamo la función LogicUpdate (deltatime) y la función Render ().

Sí, todo en un solo hilo por ahora.

El problema que estoy teniendo es con doble núcleo. Si desactivo el doble núcleo, vaya a Configuración-> Ahorro de energía y compruebo Ahorro de energía del sistema. Me doy cuenta de que la representación se bloquea automáticamente a 30 FPS. Pero si habilito el doble núcleo al desactivar el ahorro de energía del sistema, veo que el renderizado está bloqueado a 60 FPS, pero el teléfono se calienta y agota la batería muy rápido.

Así que la idea es mantener mi juego a 30 FPS para ahorrar batería.

Así que para hacer esto uso el siguiente código.

Antes de hacer la actualización lógica, llamo a este código de seguridad, recuerde que todo esto se hace en onDrawFrame ().

if( CONST_FPS > 0 && StartTime > 0 )
{           
    /////////////////////////////////////////////////////////////////
    // Get frame time
    ////////////////////////////////////////////////////////////////
    long endTime  = System.currentTimeMillis(); 
    long time     = endTime - StartTime;
    //              
    long wantedtime = 1000 / CONST_FPS;
    //
    long wait = 0;
    if( time < wantedtime )
    {
        wait = wantedtime - time;
        //                  
        Thread.sleep(wait);
    }
    else
    {
        //Time to big game will slow down
    }                           
}

Donde CONST_FPS = 30

Y entonces

StartTime = System.currentTimeMillis(); //

UpdateLogic(1.0 / CONST_FPS);
Render();

El juego a 30 FPS es muy suave principalmente porque no necesita bloquear FPS. PERO, cuando intento bloquear 60FPS a 30 FPS, me sale el tartamudeo. Investigué un poco y descubrí que Thread.Sleep () no es preciso. ¿Es esto cierto? ¿Qué más puedo hacer para que la jugabilidad sea más suave al bloquear 60FPS a 30FPS?

Gracias por la respuesta ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta