現在、 OpenGL ES を使用してAndroid端末用の 2D ゲームを開発しようとしていますが、Android OS は可能な限り苦労します。
非常に見栄えが良く、バッテリーを可能な限り消費して60FPSでスムーズに動作します. すると、ふと気がつきました。「省電力」モード ( Galaxy S IIIなど) を有効にすると、FPS が 40 に低下します。
そこで、ゲーム速度を上げてタイマーを 40FPSに制限することにしました。これにより、40FPS でスムーズにプレイできるようになります。
そして、ここで別の問題が発生します。今回は、最大 FPS が 30 に設定されていて、計算/描画が同じスレッド上にある場合でも、移動するオブジェクトがランダムにちらつきます。「省電力」が無効になっている場合(デバイスメニューから無効)、スムーズに動作し続けます。
つまり、「省電力」モードは、FPS を 40 に落とす必要がない場合でも、OpenGL ES 機能をランダムに遅くすることでアプリを遅くしています。(実行に 2 ~ 3 ミリ秒かかり、13 ~ 14 ミリ秒かかる関数があり、他の関数は正常に実行されている場合があります)
コードで「省電力」モードを無効にし、終了時に有効に戻す方法があるのだろうか。
PS:画面をオンにしておくために、次の行を使用しています:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "DoNotDimScreen");
this.mWakeLock.acquire();