ジョイント
ジョイントとは、2つのスプライトのコライダー同士を接続し、互いの物理挙動に制限をもうける機能のことです。
Joint はコンストラクタ引数として、 2 つのスプライトを受け取ります。スプライトのうち少なくとも 1 つには、 dynamic コライダーが必要です。
すべてのスプライトには sprite.joints
プロパティがあり、接続中のすべてのジョイントを配列として格納しています。
グルージョイント
『ゼルダの伝説:ティアーズ・オブ・ザ・キングダム』の「クラフト」はお好きですか? それなら、グルー(接着)ジョイントが気に入るはずです!
GlueJoint
(グルージョイント)とは、 2
つのスプライトを互いにノリ付けするように接着するだけの、最も単純なタイプのジョイントです。スプライトが物理的に触れ合っている必要はなく、ジョイントを削除しない限りは、接着が解けることはありません。
でも、ちょっと待ってください。なぜ sprite.addCollider
ではなく、グルージョイントを使うのか? 実は、グルーならではの特徴があるからです。
- 各スプライトは、別々の物理的特性を持つことができます
- 各スプライトは、別々にコリジョンを検出できます
- ジョイントを削除しても、スプライトが削除されることはありません
ジョイントは、 joint.visible
を false に設定することで非表示にでき、joint.remove
関数で完全に削除することができます。
このコードサンプルで、棒とボールのスプライトをグルーしたり、グルーを解除したりしてみてください。ボールを真上に投げあげて、棒の先端へグルーさせる、けん玉遊びにも挑戦してみましょう!
ディスタンスジョイント
DistanceJoint
(ディスタンスジョイント)とは、ゴムひものように伸び縮みしつつも、一定の距離(ディスタンス)に収束するジョイントのことです。デフォルトではこのジョイントは、互いのスプライトの中心どうしを接続します。ジョイントの取り付け位置を変更するには、その
offsetA
(第 1 引数で指定したスプライト)と offsetB
(第 2 引数で指定したスプライト)の、 x, y の値を編集します。
ジョイントの springiness
(弾力性)係数を調節して、その伸び縮み加減を変更できます。
0.0
= 鉄の棒(デフォルト)0.2
= ガッチリ硬いバネ0.4
=
硬めのバネ0.6
= 普通のバネ0.8
= トムボーイ(バネのおもちゃ)1.0
= ゴムひも
また、ジョイントの damping
(減衰)係数を調整して、振動エネルギーの失われる速さを変更することもできます。
collideConnected
を true に設定して、接続されたスプライトが互いに衝突するようにします。
ホイールジョイント
WheelJoint
(ホイールジョイント)とは、自動車などの車体を、回転する車輪(ホイール)に接続するジョイントです。ホイールジョイントを使って、運転できる車を作りましょう!
すべてのホイールジョイントには、「モーター」があり、ジョイントの speed
をお望みの速度に設定するか、 maxPower
を正の値に設定するか、
motorEnabled
を true に設定するかのいずれかによって、そのモーターは有効になります。
ホイールジョイントのモーターを無効にすることは、車のギアをニュートラルにするようなもので、ホイールは自由に転がるようになります。ホイールに「ブレーキをかける」には、ジョイントの speed を明示的に 0 に設定しなければなりません。
デフォルトでは、ホイールジョイントは maxPower
が 1000 、springiness
が 0.1 、
damping
が 0.7 、そして取り付け角度である angle
が 90 度( 0
で真右、大きくすると時計回りに角度が増える)に設定されています。
このコードサンプルの車を、運転してみてください! 道路の端まで行けるでしょうか? ホイールの位置や、取り付け角度を変えて、車をカスタマイズしてみましょう。
ヒンジジョイント
HingeJoint
(ヒンジジョイント)とは、片方または両方のスプライトが、ちょうつがい(ヒンジ)のように、同じ点を軸にして回転できるようにするジョイントです。
ディスタンス同様、回転軸の位置を変更するには、ジョイントの offsetA
または offsetB
の x, y の値を編集してください。
maxPower
が小さく、デフォルトの speed
が 0 のヒンジジョイントには、動かそうとする力に逆らう「ブレーキ」がかかります。
このコードサンプルで、マウスをかちかちクリックして、シーソーに小さなボックスを何個も乗せてみましょう。シーソーが傾くまでに、あなたはボックスをいくつ乗せられるでしょうか?
スライダージョイント
SliderJoint
(スライダージョイント)とは、 2 つのスプライトに対し、回転させず、同じ軸に沿ってスライドするよう、動きを制限するジョイントです。
ジョイントの range
は、接続されたスプライト同士が離れられる最大距離です。ジョイントの angle
を変更すると、スプライトがスライドできる向きが変わります( 0 で真右、大きくすると時計回りに角度が増える)。
デフォルトでは、このジョイントのモーターは有効で、 speed
は 0 です。 maxPower
は、このジョイントがスライドにどれだけ抵抗できるかを決定します。
コードサンプルでマウスをクリックし、ばね秤に箱を落としてみてください。ばね秤が限界に達するまでに、あなたは箱をいくつ積み重ねることができるでしょうか? angle を変えることも試してくださいね。