Box2D Lite を Flash 化してみた

これまで Box2D を使っていろいろ作ったのだけど、Box2D をはじめとする物理エンジンがどのような仕組みで動いているのか、理解していなかった。まとまった時間がある GW の間に Box2dFlashAS3 のソースを読もうとしたのだけど意味不明すぎる。

Box2D Lite があるじゃないか

諦めかけたころに、Box2D の ダウンロード ページを眺めていたら Box2D Lite なるものが存在していた。どうやら、Box2D Lite は Box2D の初期リリースのようだ。ちょっと見てみたところ、ソースの分量も少なくてシンプル。機能が増えて複雑になる手前なら全体構造も把握しやすい!

気分よくソースを読んで Box2D Lite の全体構造は把握できたものの、衝突判定のところはやっぱり意味不明。

挫折して Flash 化

悶々として楽しくなかったので、C++ のソースを ActionScript 3 に移植してみた。ソースを機械的に変換していくだけの簡単なお仕事。

Box2d Lite in ActionScript 3 - wonderfl build flash online

1~9
デモを切り替え
←、→
デモを切り替え
スペース キー
爆弾(?)を投下

機能は少ないけどそれなりに動く

Box2D Lite は円も多角形もなく、跳ね返り係数もない、ドラッグもできない。

機能は「四角とジョイント」ぐらい。ただ、四角とジョイントを組み合わせるだけでも、ドミノや橋のデモがあって、比較的それっぽい。

ソースも ActionScript で 1,500 行ほどと短い。しかも、そのうち400行ほどはデモデータだ。ActionScript には演算子のオーバーロードがないので、ベクトルや行列の演算をいちいちメソッドで実装している。C++ が読める人にとっては、オリジナルの C++ のソースのほうが読みやすいとは思う。

現在、衝突判定のところを解読中で、少しずつ謎は解けてきている。が、先は長い…。理解できたらブログにまとめるかもしれない。