ここまでの連載で,長方形や円などの形をした物体を作ってきました。これだけでも色々と遊べるのですが,それぞれの物体がバラバラに動作するので,人の体や車といった複雑な動きを実現することができません。
そういった動きを実現するためには,ジョイントという要素が不可欠です。今回は,このジョイントについて説明します。
ジョイントの役割と種類
ジョイントは,その名のとおり物体と物体をつなぐ役割を果たします。単につなぐといっても,そのつなぎ方には色々なものがあります。Box2Dには,6種類のジョイントが用意されています。
なお,それぞれのジョイントの名前について著者が勝手に訳したもので,今のところ特に決まった呼び方はありません。
ディスタンスジョイント
ディスタンスジョイントは,物体と物体の距離を一定に保つだけのシンプルなジョイントです。b2DistanceJointDefクラスで定義されます。古い時計についている振り子のようなイメージです。
回転ジョイント
回転ジョイントは,物体と物体をピンのようなものでつなぎ,回転させるジョイントです。b2RevoluteJointDefクラスで定義されます。人間で例えると,腕や足などの関節です。関節を中心に物を回すこともできます。
直動ジョイント
直動ジョイントは,ピストンのような動きをするジョイントです。b2PrismaticJointDefクラスで定義されます。直線的な動きをするので,ピンボールのボールを発射するところなどで使うといいでしょう。
プーリージョイント
プーリージョイントは,名前のとおりプーリーの役割を果たすジョイントです。b2PulleyJointDefクラスで定義されます。ディスタンスジョイントを使っていて途中で方向を曲げたくなったらプーリージョイントを使います。
ギアジョイント
ギアジョイントは,ギアによってつながれている関係を表すジョイントです。b2GearJointDefクラスで定義されます。几帳面に多角形を組み合わせてギアを作ることもできますが,このギアジョイントを使えばギアの仕組みが簡単に作れます。
マウスジョイント
マウスジョイントは,マウスで物を動かすためのジョイントです。b2MouseJointDefクラスで定義されます。マニュアルにはテスト用と書かれていますが,使い道によっては十分活用できるジョイントです。
今回取り上げるジョイント
6種類もあるジョイントを全て説明すると紙面が足りなくなってしまうので,今回は回転ジョイントとマウスジョイントについて説明します。
まずは長方形と円を回転ジョイントで組み合わせて車を作ります。そして,マウスジョイントを使って,マウスを使って車を持ち運べるようにします。
車のパーツを作る
車は,車体を表す長方形1つと,車輪を表す円2つで作ります。まずはその段階までのソースとFlashを見てみましょう。
ActionScriptのほうは起動直後にパーツが現れるようになっていますが,Flashのほうは説明の都合上クリックすると開始するようになっています。
まずは車体から
物理エンジンや床の設置についてはいつも通りなので,車体(body)を作るところから説明します。車体は長方形なので,b2PolygonDefクラスのSetAsBoxメソッドを使って形を定義します。場所の定義にはb2BodyDefクラスを使います。
車体を作る場所は,床の中心から少し上とします。サイズは,画面にコンパクトに収まるように,幅を80cm,高さを20cmとしています。場所の定義bodyDefと,形の定義bodyShapeを使って,b2Bodyクラスの変数bodyを作れば,車体の完成です。
前輪を作る
次は前輪(frontWheel)です。車体の中心から右側に30cmずらしたところを前輪の中心位置とします。場所を定義するときに,新しくb2BodyDefクラスの変数を作る必要はありません。車体の定義で使ったbodyDef変数を使いまわすことができます。Setメソッドで場所だけ書き換えるだけで構いません。
形については,b2CircleDefクラスの変数wheelShapeを作り,円形の物体を定義します。半径は15cmとします。車体から少しはみ出るような大きさです。
後輪を作る
最後は後輪(rearWheel)です。前輪とは逆に,車体の中心から左側に30cmずらしたところを中心とします。後輪を作るときには,bodyDefに加えてwheelShapeも再利用できるので,コメント抜きでたったの4行で後輪を作れます。

