【Swift】SpriteKitの使い方。2つの物理ボディをバネやスライドで結合する。(Swift 3.0、XCode 8.0)

2020年6月16日

SKPhysicsJointの続き

前回記事で2つの物理ボディをピンやヒモで結合する方法を説明した。⇒「記事

本記事はその続きで、今度はバネやスライドで物理ボディを結合する方法を説明する。

以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい(前回記事と同じプロジェクトです)。⇒「テスト用プロジェクト

事前準備では2本の丸太をシーンに配置し、ドラッグで運べるようにしておいた。

 

ゴムで結合する (SKPhysicsJointSpring)

2つの物理ボディをバネで結んだようにする。

SKPhysicsJointSpringのイメージ

 

TestScene.swiftのdidMoveメソッドに以下のコードを追加する。バネが伸縮するように物理ボディを動かすにはfrequencyプロパティに値を設定する必要がある。

 

以下は実際のプレイ動画。丸太をドラッグすると、ドラッグしている丸太の周りを別の丸太が振幅する。ドラッグをやめると振幅は徐々に弱まり停止する。

 

先ほどの結果ではドラッグ中の丸太も回転してしまうのが気になる。

そこで、ドラッグ中の丸太は物理エンジンの影響を受けないように変更しよう。ついでに、バネの様子をわかりやすくするために丸太と丸太の間に線を引く。

TestScene.swiftを以下のコードに変更する(変更箇所は青色)。ドラッグしている丸太が物理エンジンの影響を受けないようにするために、画面タッチ時に丸太のdynamicプロパティをfalseにし、画面タッチ終了時にtrueに戻している。

 

以下は実際のプレイ動画。ゴムで結んだヌンチャクみたいだ。

スライドさせる (SKPhysicsJointSliding)

ついてくる物理ボディを一定の角度で移動する結合方法。この結合が一番イメージしづらい。

SKPhysicsJointSlideのイメージ

 

TestScene.swiftのdidMoveメソッドに以下のコードを追加する。

ドラッグしたときについてくる丸太は45度の方向に移動するようにした。また、物理ボディ間の距離が50ポイント以上離れないようにした。

 

以下は実際のプレイ動画

 

結合を削除する

追加した物理ジョイントを削除するには以下のメソッドを用いる。