ジョイント

ジョイントとは、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 を変えることも試してくださいね。

前へ 次へ