車のグラフィックにJointを設定してみる。
前回のエントリーで挙げたb2DistanceJointとb2RevoluteJointを使って車をつなげる。
本当はサスペンションのグラフィックも作って本格的につなげたいところだけど、あまりJointを多く作るとかなりメモリを消費するみたいだから、簡易的なつなげ方にしておく。
Jointのつなげ方と種類は↓この図の様にする。
Jointでつなげたオブジェクト同士は、デフォルトで衝突しなくなる。
衝突させたい場合は
collideConnectedというプロパティを
trueにする。
この車の場合、衝突させてしまうとビクビクしてしまうのでデフォルトの
falseのままにしておく。
ついでに矢印キーの右を押すと前進し、左でバックする機能も入れてみた。
実際の挙動が↓これ。
This site requires flash player 9 or later.Thank you.
大分コードが長くなってきたからClassにまとめられる部分はまとめた。
・
ソース
次は衝突判定でもやってみようかな。
車のグラフィックにJointを設定する前に、Jointの種類と使い方のメモ。
Jointは大きく分けてb2DistanceJoint、b2RevoluteJoint、b2PulleyJoint、b2PrismaticJointの4種類。
どのJointの設定も基本的には同じで、2つのBox2Dオブジェクトを指定して繋げる感じ。
以下個々の説明。
- b2DistanceJoint -
これは2つのオブジェクトの距離を一定に保つ
Joint。
This site requires flash player 9 or later.Thank you.
↓
scriptはこんな感じ。
- b2RevoluteJoint -
モーターの機能がついていて、
motorSpeedというプロパティに値を与えるとオブジェクトが回転する。
This site requires flash player 9 or later.Thank you.
- b2PulleyJoint -
滑車のような動きをさせられる。
This site requires flash player 9 or later.Thank you.
- b2PrismaticJoint -
単体では変な動きをするから、
Box2DFlashAS3のサンプルにあったものを焼きなおしてみた。
This site requires flash player 9 or later.Thank you.
長くなってしまうから一つ一つソースにまとめてみた。
・
ソース
次回は車のグラフィックに
Jointを設定してみる。
今まではデバッグモードでの動作だったけど、Box2Dオブジェクトにグラフィック素材を反映してみる。
とりあえず車を作ってみよう。
まずはグラフィック素材の準備。
↓こんな感じでパーツ毎に絵を作成しムービークリップにしておく。(ピンクは
Box2Dオブジェクトの形)

BODY部分の
Box2Dオブジェクトは形が複雑なので一部簡略化してオブジェクトを作成する。(BODY下部のタイヤ部分は衝突判定が甘くても良いかと思ったから直線にしてみた)
基本的にどのパーツもオブジェクトに反映するやりかたは一緒だから、代表してBODYの例を挙げてみる。
あと、グラフィック素材の座標や回転も毎フレーム描画し直さないといけないから、前に書いたUpdate関数の中に↓これを入れておく。
↓全部のパーツを作ったサンプルとソース。
・
サンプル
・
ソース
次回はオブジェクト同士を繋ぎあわせる
Jointの設定の仕方をやってみよう。
オブジェクトをマウス操作(ドラッグ)で動かすというのをやってみる。
と言っても詳しい資料がなかなか見つからないのでよく理解出来てない、、
とりあえずサンプルにあったものを拝借して動かしてみる。
ただ、ドラッグの処理の仕方が特殊なので注意。
まずは入力用のライブラリをインポート。
マウス座標の変数と、入力用のオブジェクトを作成。
それと入力用オブジェクトを作成するときにspriteが必要になってくるからそれも作成。
(これは後々MCをBox2Dので作成したオブジェクトに貼付ける際にも必要になってくる)
そして、マウス位置を取得する関数、ドラッグする関数、マウスの位置にあるオブジェクトを取得する関数の3つの関数を用意。
↓毎フレームマウス位置を取得する関数。
↓実際にドラッグする関数。
↓マウスの位置にあるオブジェクトを取得する関数。
そして上記3つの関数を毎フレーム実行すればドラッグできる。
以下今までの全ソース
・
ソース