Konstante FPS Android OpenGLES

Hallo Android-Entwickler,

Ich entwickle ein einfaches Spiel für Android in Eclipse mit OpenGLES 1.0. Ich verwende Samsung Galaxy S2 Android (2.3) als Entwicklungsgerät.

Und ich habe eine Frage zu Dual Core und zur Konstanthaltung der Bildrate.

Ich habe es also geschafft, GLSurfaceView zu erstellen und die onDrawFrame () -Funktion zu überschreiben, wobei ich die LogicUpdate (DeltaTime) -Funktion und die Render () -Funktion aufrufe.

Ja, vorerst alles in einem Thread.

Das Problem, das ich bekomme, ist mit Doppelkern. Wenn ich den Dual-Core-Modus deaktiviere, indem ich unter "Einstellungen" auf "Energiesparmodus" gehe und den Energiesparmodus des Systems überprüfe, wird das Rendern automatisch bei 30 FPS gesperrt. Wenn ich den Dual-Core-Modus durch Deaktivieren des Kontrollkästchens für den Energiesparmodus des Systems aktiviere, wird das Rendering bei 60 FPS gesperrt, das Telefon wird jedoch heiß und der Akku wird sehr schnell entladen.

Die Idee ist also, mein Spiel auf 30 FPS zu halten, um etwas Batterie zu sparen.

Dazu benutze ich den folgenden Code.

Denken Sie daran, dass dies alles in onDrawFrame () erfolgt, bevor ich die Logikaktualisierung durchführe.

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
    }                           
}

Wobei CONST_FPS = 30

Und dann

StartTime = System.currentTimeMillis(); //

UpdateLogic(1.0 / CONST_FPS);
Render();

Das Gameplay mit 30 FPS ist sehr flüssig, vor allem, weil FPS nicht gesperrt werden müssen. ABER, wenn ich versuche, 60 bis 30 FPS zu speichern, bekomme ich ein Stottern. Ich habe ein paar Nachforschungen angestellt und festgestellt, dass Thread.Sleep () nicht genau ist. Ist das wahr? Was kann ich noch tun, um das Gameplay flüssiger zu gestalten, wenn ich 60FPS auf 30FPS sperre?

Danke für die Antwort ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage