「cocos2d 2.0」のsetDisplayStatsの見方

cocos2dをバージョンアップしてから変わったことが「setDisplayStats」になります。 cocos2dのver1の時はFPSしか表示されていなかったのですが、ver2になり、新たに2つの項目が加わりました。

2013 2 17 ddee

上から順番に

  • フレームあたりのdrawのコール数
  • SPF(Seconds PerFrame):フレームごとに費やした秒数
  • FPS(フレーム数/秒)

AppDelegate内に以下のようなコードを書けば、これらの数字を見ることができます。 [c] // Display FSP and SPF director = (CCDirectorIOS*) [CCDirector sharedDirector]; [director setDisplayStats:YES]; [/c]

フレームあたりのdrawのコール数

これは、1フレームにどれだけのdrawメソッドを呼び出しているかが、数字が表されます。 drawは実際にスプライトを描画しているメソッドで、CCSpriteやCCMenuItem,CCLabelTTFなど、画面上に何かを表示する際に利用しています。 例えば,CCSpriteを3つレイアーに配置すれば、この「フレームあたりのdrawのコール数」は3になります。

公式では、この数字はできるだけ抑えたほうがいいそうです。

フレームごとに費やした秒数

1フレームに費やした時間を表しています。 ここで時間が掛かると、FPSの値も落ちてしまうので、画面がカクついて表示されます。

FPS(フレーム数/秒

1秒あたりのフレーム数。

これは、Appdelegateで設定したFPSが基準になっています。 例えばFPS=60にする場合は、AppDelegateに下記のようなコードを書きます。 [c] // set FPS at 60 director = (CCDirectorIOS*) [CCDirector sharedDirector]; [director setAnimationInterval:1.0/60]; [/c]

これが、基準よりも小さくなっているときは、フレーム毎の処理が重たくなっていると考えられます。 画面もカクカク表示されているはずです。

どうやって使うか

見ておきたいのはFPSの値です。 これが、小さくなっている場合は、プログラム内の処理に時間がかかっているので改善をする必要があります。 その際に、「フレームあたりのdrawのコール数」が増えていないかなどを見て、もし多いのが原因ならそれを直さないといけません。

個人的に、このFPSが小さくなることはほとんどないかと思いますが、デバックのためにNSLog()やCCLOG()などを記載していると、その部分を読み込む時に処理が落ちていく現象がみられました。 これらを外してみるのも一つの方法でしょう。

cocos2d 1.0の場合

これまでは、cocos2dがver2以上の時の話です。 cocos2dのver1ではFPSだけが表示されます。

またアプリ内のcocos2dのバージョンを2.0に上げた場合は、「fps_images-hd.png」をプロジェクトに加えないとRetinaで画面を見た際にバクッで表示されます。注意してください。