今回の趣旨

ちょいちょいスクリーンショットを載せていましたが、実は現在SPRGのゲームを作っています。

敵のターン以外は、特にタイマー制御とか使ってないので油断して自由に開発していたら、キャラクターを表示しまくるとガクッっとFPSが下がる現象がでたので、その時の対策とか備忘録です。

調査した内容

歩行アニメーション

まずこれを疑いました。たくさんキャラがいてみんな歩行アニメーションしているので、これを止めたらどうだろう?と思ってやってみましたが、反応なし。。。

AndEngineの大本にあるスレッドでうまく描画してるんだろうなぁーと予想。

オブジェクト数

プレイヤーキャラのクラスには、カットイン演出や攻撃エフェクトなど色々なSpriteを生成して非表示にして持っていました。これを減らしてみたところ、20FPSくらいだったのが25FPSに・・・あまり変わらない。。。

オブジェクトの生成タイミングをゲーム中に行うと結構固まるので、うまく別スレッドで生成するか起動時にやらないといけないので、これは仕方ないコストかと思います。

まあ、それでも確実に不要になるものはケースによって使わないことが確定するものは生成しないようにしましょう。

オブジェクトのサイズ

よくよく考えると、カットインとか色々あるからプレイヤーキャラのクラスは、Rectangleを画面いっぱいに引き伸ばしてベースのレイヤーみたいな感じにしていました。

この上に歩行グラとかカットインとか攻撃エフェクトをattachしてたのですが。。。まさか!!?

ええ、まさにこれでした。

すべてのプレイヤーキャラが画面いっぱいのオブジェクトを持っていたので、いくら透明にしていても描画ストレスになりますよね・・・

というわけでRectangleの縦横のサイズを最小限のサイズ(1グリッドのサイズ)にしたところ見事52FPSくらいに復活!!

ちゃんとさくさく動いてます。

透明だからって油断していましたが、逆に透明のほうが大変なのかな・・・

というわけでソースコードは特にないですがそんな感じでした。

device-2013-02-03-213953

素材提供:臼井の会
素材の二次利用、販売、再配布を禁じます。