EaselJSのお勉強でBox2DWebを触ったので、その先を進めようとしたら意外とサンプルがない。JS版も基本的にBox2DFlashAS3と同じらしいんで、サンプルを漁ってみたもののどれも古くてそのままでは動かない。なんとか動くようにできたけど、色々変わってる点もがあり、それについて書かれた日本語ページを見つけられなかったので、今後のためにメモ。
Box2D 2.0.0のサンプルを2.1aで動かすための注意点
※ Box2DFlashAS3 2.0.0 を 2.1a で動かすための変更点です。
まず、古いサンプルだとパブリッシュ設定がFlash Player9 になってる場合が多いけど、これだとこんなエラーが出ます。
これはFlash Player 10以上にすることで解決します(Flash Player11.4+Flash CS6で確認)。
次に Box2D.Dynamics.b2world クラスの b2wolrd メソッドの引き数が変わっています。
それから Box2D.Collision.Shapes 配下のクラスが変わっています。
そして Box2D.Dynamics.b2world クラスの bodyを作る為のメソッドが変わっています。
2.0.0では、作るbodyの種類毎に world.CreateStaticBody、world.CreateDynamicBody とメソッドがあったようですが、2.1a では1つになっています。で、staticとかdynamicの指定は、Box2D.Dynamics.b2BodyDef で設定するようになっています。
また 2.0.0 では Box2D.Collision.Shapes に指定していた密度、摩擦係数、弾性(density,friction,restitution)は、2.1a では Box2D.Dynamics.b2FixtureDef に指定します。
よくサンプルで使われている Box2D.Dynamics.b2DebugDraw もメソッドが大幅に変わっています。「m_…」が「Set…」に変更されています。
最後に、物理シミュレーションを更新するための world.step() は、引数が2つから3つに変更されています。
そして Box2D.Dynamics.b2DebugDraw を使う際は、world.Step() を呼び出したあとに・・・
が、必要なようです。
とりあえずココまでの対処で、2.0.0 のサンプルを 2.1a で動かすことができました。まだ理解し切れてるとはいえないので、誤り等ありましたらご指摘下さい。下記サンプルを書き換えて動作確認しました(MaxOSX10.7.6+Flash CS6+Box2DWeb 2.1a)。感謝。
【追記】2013.7.21 東京ひよこの会 第5回で、この内容を発表した際に見つけた誤りを修正しました。
(誤)(2.0.0)b2CircleDef >> (2.1a)b2PolygonShape
(正)(2.0.0)b2PolygonDef >> (2.1a)b2PolygonShape