【Swift】SpriteKitの使い方。物理ボディを等速度運動させる。【Swift】SpriteKitの使い方。物理ボディを等速度運動させる。Field(以下、等速度ノード)」について説明する。等速度ノードとは、物理ボディを等速度運動させるノードである。Field(以下、線形重力ノード)は物理ボディを加速させるのに対し、等速度ノードは加速させない点が異なる。等速度ノードを使ってみる実際に等速度ノードをシーンに配置して物理ボディを等速度運動させてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。下図赤枠のSKSファイルを選択してシーンエディタを開く。Field」をシーンに配置する(紫矢印)。Maskに「1」を設定、Enabledのチェックを外す。Maskに「1」を入力する。Maskのビットマスクを同じにしたので、ボールは等速度ノードの力を受けるようになる。⇒「ビットマスクとは」TestScene.swiftのtouchesBeganメソッドを以下のコードに変更する。//等速度ノードを取得する。//等速度ノードの効果を有効にする。{//等速度ノードを取得する。SKFieldNode//等速度ノードの効果を有効にする。true}以下は実際のプレイ動画。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_velocity_field_normal_movie.mp4ソースコードで実装するシーンエディタではなく、ソースコードで等速度ノードを実装する場合は以下のコードのようにする。試してみる場合は、先ほどシーンエディタで追加した等速度ノードを削除してから行うこと。//等速度ノードを作成する。//等速度ノードの名前を設定する。//等速度ノードの効果を無効にする。//等速度ノードのカテゴリマスクを設定する。//シーンに等速度ノードを追加する。{..省略..//等速度ノードを作成する。SKFieldNode.velocityFieldWithVector(vector_float3(0,-2.0,0))//等速度ノードの名前を設定する。"velocity"//等速度ノードの効果を無効にする。false//等速度ノードのカテゴリマスクを設定する。0b0001//シーンに等速度ノードを追加する。self.addChild(noiseNode)}線形重力ノードの場合と比較して、本当に等速度運動なのかを確かめよう。以下の動画は、左側は線形重力ノード、右側は等速度ノードを用いてボールを運動させたもの。vector_float3は両方ともY軸方向「-2.0」に設定した。加速する左側のほうが早く画面下端に到着しそうな気がするが、実際は右側のほうが早く到着した。線形重力ノードと等速度ノードのdirectionプロパティの作用が異なることになるが、深追いしないでおく。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_velocity_field_gravity_movie.mp4落下開始から一定時間ごとのボールの位置を横並びにして加速を確認してみよう。1秒を15フレームに分割して観測した。下図は左側(線形重力ノード)の0.33秒(5フレーム)ごと落下位置。ボールが加速していることが分かる。下図は右側(等速度ノード)の0.33秒(5フレーム)ごと落下位置。Field(以下、線形重力ノード)」と同じなので、そちらを参照されたし。線形重力ノードの説明と異なる項目を説明する。Strengthこの設定値を変更しても物理ボディの運動は何も変わらない。等速度ノードの力はDirectionの設定値で決まる。Falloffこの設定値を変更しても物理ボディの運動は何も変わらない。試しにボールを下図のように縦に並べて、falloffに効果があるのか実験してみよう。等速度ノードは画面左下に配置する。TestScene.swfitのtouchessBeganメソッドを以下のコードに変更する。falloffを「10.0」、vector_float3をX軸方向「2.0」に設定した。//等速度ノードを作成する。