Постоянный 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.
Спасибо за ответ ...