【Swift】SpriteKitの使い方。ゴムで引っ張ってボールを飛ばすような動きを作る。(Swift 2.2、XCode 7.3)

2020年6月16日

物理ボディを飛ばす

本記事ではボールを引っ張って飛ばす動きの実装方法について説明する。なお、実装サンプルに出てくるゴムは反発力を持っているのではなく、雰囲気を出すための演出である。

ボールを引っ張る

 

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

事前準備では、ボールを配置して指で運べるようにしておいた。

 

ゴムっぽいものを配置する。

まずはシーンに配置してある2つの青箱を線(以下、ゴム)で結び、ボールをクロスさせるとゴムがボールに引っ張られてついてくるような演出を実装する。

TestScene.swiftを以下のコードに変更する。ボールが青箱よりも上にいるときは青箱同士をゴムでつなげる。一方、ボールが青箱より下にいるときは青箱とボールをゴムでつなげている。

ゴムとボールを常にくっつかせるために描画処理はupdateメソッドに実装している。updateメソッドとはシーン表示後に1フレームごとに呼び出されるメソッドである。

 

以下は実際のプレイ動画。

ボールを飛ばす

次に、ボールを引っ張って離すと飛んでいく動きを実装する。実装イメージは以下のようになる。

ボールをドラッグして、ボールとゴムが接触した座標を保存する(以下、スタートポイント)。

ボールが触れた位置を保存する

 

ボールを移動してゴムを引っ張ったあとに、ボールを離した座標を保存する(以下、エンドポイント)。

ボールを離した座標を保存する

 

ボールをスタートボタンまで移動し、到着したらスタートポイントとエンドポイントから求められるベクトル方向の速度をつける。その際、スタートポイントとエンドポイントの距離が長いほど速度を大きくする。

ボールに速度をつける

 

TestScene.swiftのtouchesMovedメソッドに以下のメソッドを追加する。タッチ開始時にボールの速度を0にし、タッチ終了時にボールに速度をつけている。

 

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

 

以下は実際のプレイ動画