FPSLoggerでフレームレートをはかる
やってく過程で異常に処理が重いことに気づいたので、FPS(ゲームのジャンルのほうじゃなくて、Frame per secondのほう)をはかってみます。
com.badlogic.gdx.graphics.FPSLogger というクラスがLibGDXに存在したので、今回はこれを使ってみました。
・FPSLoggerSample.java
/** * FPSを計測出来るクラスFPSLoggerの使い方サンプル. * コンソールにFPS値のログがはかれます. */ public class FPSLoggerSampleListener extends ApplicationAdapter { private FPSLogger fpslogger = null; @Override public void create() { fpslogger = new FPSLogger(); } @Override public void render() { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //画面クリア fpslogger.log(); //ここ呼んであげればよい } }
インスタンスを生成して、ApplicationLisner#render()でlogを呼んであげればよいようです。
出力結果は以下のようなかんじで、1秒単位でログに出力されます。
FPSLogger: fps: 61 FPSLogger: fps: 60
LibGdxは可変フレームレートかと思っていたのですが、どんなに軽い処理(上のように何もしてない処理でも)60〜62位を保っていて、 それ以上にはあがらないですね。固定??
・パフォーマンス改善前(平均10FPS…)
ゲームに組み込むと、上のようにかなり重くてもちろん環境に依存すると思うのですが古いPCでやったら平均10FPS位でした。。
原因は、newをループの中でしていた為です。FPSが時間経過ごとのどんどん落ちていったのでそれで気づけました。
・パフォーマンス改善後(平均60FPS)
FPS60を保つのが目標でやっていくとよい、とひらしょー本にかいてあった。