FPS OpenGLES constantes do Android
Olá desenvolvedores do Android,
Estou desenvolvendo um jogo simples para Android no Eclipse usando o OpenGLES 1.0. Eu estou usando o Samsung Galaxy S2 Android (2.3) como um dispositivo para desenvolvimento.
E eu tenho uma pergunta sobre o dual core e fazer a taxa de quadros constante.
Então eu consegui criar o GLSurfaceView e substituir a função onDrawFrame () onde eu chamo a função LogicUpdate (deltatime) e a função Render ().
Sim, tudo em um único segmento por agora.
O problema que estou recebendo é com dual core. Se eu desabilitar o dual core indo em Configuração-> Economia de energia e verificação de economia de energia do sistema, percebo que a renderização é bloqueada automaticamente a 30 FPS. Mas se eu ativar o dual core desmarcando a Economia de energia do sistema, vejo que a renderização está bloqueada em 60 FPS, mas o telefone fica quente e drena a bateria muito rápido.
Então a ideia é manter meu jogo rodando a 30 FPS para economizar bateria.
Então para fazer isso eu uso o código abaixo.
Antes de fazer a atualização lógica, chamo essa paz de código, lembre-se de que tudo isso é feito em 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
}
}
Onde CONST_FPS = 30
E depois
StartTime = System.currentTimeMillis(); //
UpdateLogic(1.0 / CONST_FPS);
Render();
A jogabilidade a 30 FPS é muito suave, principalmente porque não precisa bloquear o FPS. MAS, ao tentar bloquear 60FPS a 30 FPS eu fico gaguejando. Eu fiz alguma pesquisa e descobri que Thread.Sleep () não é preciso. Isso é verdade? O que mais posso fazer para tornar o jogo mais suave ao bloquear 60FPS a 30FPS?
Obrigado pela resposta ...