【Swift】SpriteKitの使い方。物理ボディにバネをつけたかのように振動させる。【Swift】SpriteKitの使い方。物理ボディにバネをつけたかのように振動させる。Field(以下、バネノード)」について説明する。SKFieldNodeとは、重力や乱気流など様々な物理的効果を物理ボディに与えるノードである。バネノードはSKFieldNodeの一種で、バネノードを中心に物理ボディを単振動させるノードである。物理ボディにバネを取り付けたような動きをする。バネノードを使ってみる実際にバネノードをシーンに配置して物理ボディを単振動させてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。事前準備では、目印とボールをグリッド線の背景の上に配置しておいた。この段階では何も起きない。下図赤枠のSKSファイルを選択してシーンエディタを開く。Field」をシーンに配置する(紫矢印)。Maskに「1」を入力、Enabledのチェックを外す。Maskに「1」を入力する。MaskのビットマスクのAND演算結果が0以外になるので、黒ボールはバネノードの物理的効果を受けるようになる。⇒「ビットマスクとは」TestScene.swiftのtouchesBeganメソッドを以下のコードに変更する。「spring」の前にスラッシュスラッシュが付いている理由は次の記事を参照されたし。//バネノードを取得する。//物理的効果を有効にする。{//バネノードを取得する。SKFieldNode//物理的効果を有効にする。true}以下は実際のプレイ動画。バネノードを中心に黒ボールが左右に単振動するようになった。振動幅は徐々に短くなっていき最終的に動きが止まる。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_spring_field_normal_mvovie.mp4ソースコードで実装するシーンエディタではなく、ソースコードでバネノードを実装する場合は以下のコードのようにする。試してみる場合は、先ほどシーンエディタで追加したバネノードを削除してから行うこと。//バネノードを作成する。//バネノードの名前を設定する。//バネノードのカテゴリマスクを設定する。//バネノードの物理効果を無効にする。//中心ノードを取得する。//中心ノードの子にバネノードを追加する。{..省略..//バネノードを作成する。SKFieldNode.springField()//バネノードの名前を設定する。"spring"//バネノードのカテゴリマスクを設定する。0b0001//バネノードの物理効果を無効にする。false//中心ノードを取得する。SKSpriteNode//中心ノードの子にバネノードを追加する。centerNode?.addChild(springNode)}バネノードを移動する中心ノードをドラッグで移動させると黒ボールはどのような動きをするか試してみよう。TestScene.swiftに以下のメソッドを追加する。//中心ノードを取得する。//タッチした座標を取得する。//タッチした位置まで移動するアクションを作成する。//アクションを実行する。{//中心ノードを取得する。SKSpriteNode//タッチした座標を取得する。touches.first!.locationInNode(self)//タッチした位置まで移動するアクションを作成する。duration:0.1)//アクションを実行する。centerNode!.runAction(action)}以下は実際のプレイ動画。ボールの進行方向と逆向きにバネノードを動かすとボールは加速し、進行方向と同じ向きにバネノードを動かすとボールは減速する。バネを伸ばして勢いをつけ、バネを縮めて勢いを弱くする感覚と同じだ。Field(以下、線形重力ノード)」と同じなので、そちらを参照されたし。線形重力ノードの説明と異なる項目を説明する。Stringthプラス値の場合はバネノードに向かって物理ボディが加速し、マイナス値の場合はバネノードから遠ざかる方向に物理ボディが加速するのは同じだが、マイナスにしてしまうとボールはバネノードからどんどん離れていって単振動にならないので注意すること。Falloffシーンエディタでバネノードを配置するとFalloffはデフォルトでは「-1」に設定されているが、この値を一度変更すると何故かマイナスの値を設定できなくなる。以下の動画はFalloffが「-1」の場合と、「0」の場合を比較したもの。減衰率が大きいほど加速度が大きくなるということか。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_spring_field_falloff_hikaku_movie.mp4大きい方が振動が速くなるからといって、Falloffにプラス値を設定すると予測不能の動きをする。以下の動画はFalloffに0.5を設定したときの動画。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_spring_field_falloff_05_movie.mp4バネの振動幅を維持するバネノードを動かさないとボールは徐々に勢いが無くなり、最後は停止する。(線形減衰)によって減速させられるためである。Dampingを「0」に設定して動かしてみよう。StrengthとFalloffはデフォルトの値に戻してから実行する。(Stringは「1」、Falloffは「-1」)下図赤枠のSKSファイルを選択してシーンエディタを開く。Dampingを「0」に変更する。以下は実際のプレイ動画。ボールの勢いが衰えなくなった。【Swift】SpriteKitの使い方。物理ボディをクネクネさせながら進ませる。...【Swift】SpriteKitの使い方。物理ボディを等速度運動させる。...【Swift】SpriteKitの使い方。SKFieldNodeでノードに直線方向の加速度を発生させる。...【Swift】SpriteKitの使い方。シーンエディタでノードのリサイズアクションを設定する。...【Swift】SpriteKitの使い方。放射重力ノードで物理ボディを引き寄せたり、遠ざけたりする。コメントをキャンセルメールアドレスが公開されることはありません。