FlasCC Box2D.swc を使用する前のメモ
FlasCC/samples/Example_Box2D 内にあるサンプル Boxes.as, Box2DSprite.as ファイルの中身を見つつ、気付いた点をメモしていきます。box2dFlash は ver2.1a, Box2D.swc は ver2.2.1 となっており、バージョンによる変化の違いも記述します。
インスタンスは create メソッドで生成するクラスがある
new で生成せず、static メソッドの create を用いて生成しているクラスが結構あります。
メモリ効率化のためなのか、または変換されたプログラムの仕様上そうなのか、もしくはそれほど意味は無いのか、理由は色々考えられますが詳細は不明。
例)重力設定用 b2Vec2 インスタンスの生成
gravity = b2Vec2.create();
インスタンスの参照渡しは swigCPtr という変数を通して行う
C/C++ から AS3 への変換に SWIG というツールを用いられているという事からか、box2d クラス内処理に変更がかかっているようです。
new で生成しなくなった点と合わせて、Box2D.swc を利用する場合どのように記述を行うのか、以下比較用コードとなります。
box2dFlash v2.1a
gravity = new b2Vec2(); world = new b2World(gravity, ~);
FlasCC Box2D.swc
gravity = b2Vec2.create(); world = b2World.create(gravity.swigCPtr)
swigCPtr という変数は多くの box2d クラスフィールド内に設けられています。swigCPtr 変数は int 型です。
今までインスタンスを渡していたものに比べて型チェックが緩くなり、バグも生まれやすくなる点に注意が必要です。
sample 内 as ソースコードの Y軸方向の数値が逆
サンプル as ファイル内 Y軸方向の数値の正負が逆になっており、サンプルを参考に制作しようとすると動作がおかしいことになってしまいます。
例えば Boxes.as 内の重力を設定する箇所では、Y軸方向の数値に -10 が指定してあります。
gravity.Set(0.0, -10.0);
その他、地面となる物質の配置位置が画面外の上に設定されていたりします。
groundBodyDefPos.Set(0.0, -5.0);
C/C++ で扱う座標と Flash 上の座標とでは Y軸正負の扱いがおそらく逆なのではないかと思われます。Boxes.as 内では box2d 関連以外のクラスを利用している箇所があり、そこで Y軸反転処理を行なっているのかもしれません。よく内容は見ていないので詳細は不明です。
デバッグ表示方法に変更
v2.2 では b2DebugDraw クラスがなくなり、別の方法で デバッグ表示を行うようになったようです。
ネット上で調べてみると GLESDebugDraw クラスというものを利用するようですが、Box2D.swc 内にはそのようなクラスは存在しません。サンプルの Box2DSprite.as を見る感じ 独自に物体を描写している、という事から、デバッグ表示を行う方法は Box2D.swc には用意されていないのかもしれません。
デバッグ表示を行う方法の調査はとりあえず保留に。
その他参考
SWIGとは
http://ja.wikipedia.org/wiki/SWIG
Box2D API Reference for Kobold2D developers
http://www.learn-cocos2d.com/api-ref/1.0/Box2D/html/annotated.html