Android での FlasCC box2d(v2.2.1) と box2dFlash(v2.1a) の動作パフォーマンスの比較
box2d の物体を 100 個ほど落下させるだけの処理を、FlasCC box2d(v2.2.1) と box2dFlash(v2.1a) それぞれを用いて作成し、Adobe AIR を用いて Android アプリに変換後、端末上にて動作比較を行いました。
比較結果は、両者ほぼ動作速度に差は無し、となりました。
FlasCC box2d(v2.2.1) 版のほうが多少 FPS1~2 程高く安定するかな…?程度です。作成したサンプルは、記事内最下部に表示します。
予想・仮説
FlasCC 版 box2D を用いたが、box2dFlash に対しよい結果を得られなかった理由は何であるか、いくつか考えてみました。
FlasCC で出力された swc を AIR で再コンパイルするのだから意味が無い
高速で動作するように最適化されたファイルが、AIR のコンパイルにて 最適化されないように再変換されてしまったのでは、という考えです。
FlasCC によって直に出力された swf にしか、高速化の恩恵は授かれないのではないのかもしれない、とも考えました。FlashCC によって出力された swc はあくまで C/C++ プログラムを Flash にて利用する事ができるようになるためのものであり、高速化としての用途は無いのかもしれません。
AIR の最適化能力が上がっていて FlasCC の最適化能力と大差なくなっている
すでに AIR のアプリ制作能力は、FlasCC と同等の高機能なものになっており、FlasCC で最適化された swc を利用したところでさほど変化は起こらない、という考えです。
私の何か手順ミス
FlasCC で出力された Box2D.swc を利用する上での何か必要な設定を飛ばしている可能性あり。あるいは私の何かの単純なミス。何日か経った後にミスに気づく、なんて事はよくあります。
実は結構よい結果になっている
今回の大量に物体を落下させるだけのサンプルプログラムでは よい結果は得られませんでしたが、joint 機能など box2d の別の機能を用いた処理では、より良い結果になる可能性もあります。
FlasCC 版 box2d を利用する事により、結果が悪くなったという事はないので(AS3エディタの quickfix 動作で少々つまずきましたが)、今後は FlasCC 版 box2d を利用していこうとは思います。
デモ
以下は AIR で動作検証したものと同じ内容の swf です。FlasCC box2d を用いて作成したものです。
Android 端末の nexus7 では FPS36~38 程度となり、知人に検証してもらった Android 2.3 の端末では FPS30~35 程度となりました。
追記)補足検証しました。
http://www.dango-itimi.com/blog/archives/2012/001145.html