Постоянный FPS Android OpenGLES

Привет разработчики Android,

Я разрабатываю простую игру для Android на Eclipse, используя OpenGLES 1.0. Я использую Samsung Galaxy S2 Android (2.3) в качестве устройства для разработки.

И у меня есть вопрос о двухъядерности и постоянстве частоты кадров.

Поэтому мне удалось создать GLSurfaceView и переопределить функцию onDrawFrame (), где я вызываю функцию LogicUpdate (deltatime) и функцию Render ().

Да, пока все в одной теме.

Проблема, которую я получаю, с двухъядерным. Если я отключу двухъядерный процессор, перейдя в меню «Настройка энергосбережения» и выбрав «Энергосбережение системы», я пойму, что рендеринг автоматически блокируется при 30 кадрах в секунду. Но если я активирую двухъядерный процессор, сняв флажок «Энергосбережение в системе», я вижу, что рендеринг заблокирован на скорости 60 FPS, но телефон нагревается и очень быстро разряжает батарею.

Поэтому идея состоит в том, чтобы моя игра работала со скоростью 30 FPS, чтобы сэкономить заряд батареи.

Поэтому для этого я использую код ниже.

Прежде чем я сделаю обновление логики, я называю это спокойствие кода, помните, что все это делается в 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
    }                           
}

Где CONST_FPS = 30

А потом

StartTime = System.currentTimeMillis(); //

UpdateLogic(1.0 / CONST_FPS);
Render();

Геймплей на 30 FPS очень плавный в основном потому, что не нужно блокировать FPS. НО, при попытке заблокировать 60FPS до 30 FPS я заикаюсь. Я провел некоторое исследование и обнаружил, что Thread.Sleep () не является точным. Это правда? Что еще я могу сделать, чтобы сделать игровой процесс более плавным при блокировке 60FPS на 30FPS.

Спасибо за ответ ...

Ответы на вопрос(2)

Ваш ответ на вопрос