Box2DでActionScript物理プログラミング
第2回 物理エンジンをセットアップし,箱を落とすFlashを作る
Box2Dを使った簡単なFlashを作ってみましょう。まずは,床の上に箱を落とすだけのFlashです。ソースコードの説明をする前に,動作を見てみましょう。
サンプルについて
コンパイルと実行
まず,以下のActionScriptファイルをダウンロードしてください。このファイルはどこに置いても構いません。
次に,mxmlcを使ってActionScriptをコンパイルします。このとき,-source-pathオプションを指定して,Box2Dがある場所を指定する必要があります。
mxmlc -source-path=C:\lib\Box2DFlashAS3_2.0.0 DropBox.as
少し長いですね。通常のコンソール画面であれば,上キーを押して以前のコマンド履歴を参照出来るので,二度目以降は入力する必要はありません。何度もコンパイルするときに時間がかかって仕方が無いという方にはfcshがオススメです。興味のある方は調べてみてください。
さて,出来たDropBox.swfは以下のようなものになります。
最初は何も表示されていませんが,画面内をクリックしてみてください。少し傾いた箱が落ちてきて,バウンドした後に静止します。もう一度クリックすると,最初から実行されます。
物理エンジン内のレイアウト
このサンプルが,実際にどのようなスケールの中で展開されているのか説明します。幅4m,厚さ20cmの床の上に,幅60cm,高さ40cmの箱を落とします。箱は,床から2mのところから落とします。画面全体のサイズは幅5m,高さ3.75mです。図で説明すると以下のとおりです。
こうしたスケールにしている理由の1つは,Box2Dで扱いやすいスケールが0.1m(10cm)から10mであるということです。マニュアルの中では,スープの缶からバスぐらいまでと書かれています。Box2Dはこの範囲内で動くようにチューニングされており,範囲を超えてしまうと,シミュレーションの精度が落ちてしまうようです。詳しくはマニュアル中の3.3. Unitsを参照してください。
もう1つの理由は,イメージのしやすさです。実はBox2Dの公式マニュアルに今回の説明とほぼ同じ説明があるのですが,その中に出てくる箱のサイズは1m四方と少し大きめです。そこで,それよりも少し小さくして,幅60cm,高さ40cmとしました。
イベントハンドラの登録
それではプログラムの説明に移ります。まずはコンストラクタの説明です。ここでは2つのイベントハンドラを登録しています。
stage.addEventListener(MouseEvent.CLICK, clickHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
1つは,クリックによって物理エンジンのセットアップを行うためのイベントハンドラclickHandlerです。このイベントハンドラが今回の内容の大半を占めます。
もう1つは,画面が更新されるときに物理エンジン内の時間を進めるためのイベントハンドラenterFrameHandlerです。
物理エンジンのセットアップ
clickHandlerでは,物理エンジンのセットアップ,床と箱の設置,描画設定と,一通りのことを行います。まずは物理エンジンのセットアップから見ていきましょう。
外枠を定義する
最初にすることは,物理エンジンが影響する範囲を決めることです。
var worldAABB:b2AABB = new b2AABB();
worldAABB.lowerBound.Set(-100, -100);
worldAABB.upperBound.Set(100, 100);
範囲はb2AABBクラスで定義されます。このAABB(Axis-aligned bounding box)とは物理エンジンでよく出てくるのですが,斜めになっていない,軸に沿った長方形だと考えてください。長方形の左上がlowerBound,右下がupperBoundとなります。
これを図で表すと以下のようになります。
ここでひとつ大事なポイント。指定している数値は決してピクセル単位ではありません。マニュアルには,この数値はメートルとして考えると書かれています。これに従うと,AABBは縦横200mとなります。これだけのサイズがあれば,物理エンジンの影響範囲は十分にカバーできます。
その他の単位については,重さはキログラム,時間は秒とするといいと書かれているので,これらも指示通りにします。
Box2DでActionScript物理プログラミング
- 第7回 円を落として星を飛び散らせる
- 第6回 画像を使って表現力アップ
- 第5回 ジョイントで物をつなぐ
- 第4回 いろいろな形の物体を作る
- 第3回 マウスのドラッグ&ドロップで,好きなサイズの箱を作る
- 第2回 物理エンジンをセットアップし,箱を落とすFlashを作る
- 第1回 Box2Dを使ってみよう
-
Box2dFlashAS3やってみた!
・クリックするとハコが落ちてくるというサンプルソース。 via : 技評:Bo...
Tracked : #1 mojalog (2008/10/10, 23:57)



