【Swift】SpriteKitの使い方。物理運動の抵抗力を発生させて動きをスローにする。【Swift】SpriteKitの使い方。物理運動の抵抗力を発生させて動きをスローにする。Field(以下、抗力ノード)」について説明する。抗力ノードとは、物理ボディの動きに対する抵抗力を発生させるノードである。ボールを水槽の中に落としたとき、空気中を落下するよりもゆっくりと落下していく。これはボールに対する浮力と抵抗力が働くためである。Fieldの「Drag」は「抗力」という意味。ドラッグ&ドロップの「ドラッグ」と勘違いしそうな名前だ。抗力ノードを使ってみる実際に抗力ノードをシーンに配置して物理ボディを落下させてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。事前準備ではボールをシーンに配置しておいた。下図赤枠のSKSファイルを選択してシーンエディタを開く。Field」をシーンに配置する(紫矢印)。Maskに「1」を入力する。Enabledのチェックは入れたままにする。Maskに「1」を入力する。Maskのビットマスクが同じなので、ボールは抗力ノードの物理的効果を受けるようになる。⇒「ビットマスクとは」TestScene.swiftのtouchesBeganメソッドを以下のコードに変更する。画面がタップされたら重力でボールが落下するようにした。//ボールノードを取得する。//ボールノードに重力加速度を発生させる。{//ボールノードを取得する。SKSpriteNode//ボールノードに重力加速度を発生させる。true}以下は実際のプレイ動画。左側は抗力ノードを無効にしたもので、右側は有効にしたもの。右側は抗力ノードの抵抗力により通常よりボールがゆっくり落下した。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_drag_field_hikaku_movie.mp4落下開始から一定時間ごとのボールの位置を横並びにして加速を確認してみよう。1秒を15フレームに分割して観測した。下図は左側動画(抗力ノードを無効)の0.13秒(2フレーム)ごと落下位置。ボールが加速していることが分かる。加速していないことが分かる。これにより、水中での落下と同じように、抗力ノードの抵抗によって物理ボディの落下速度がすぐに一定になることが明らかとなった。ソースコードで実装するシーンエディタではなく、ソースコードで抗力ノードを実装する場合は以下のコードのようにする。試してみる場合は、先ほどシーンエディタで追加した抗力ノードを削除してから行うこと。//抗力ノードを作成する。//抗力ノードの名前を設定する。//抗力ノードのカテゴリマスクを設定する。//中心ノードを取得する。//中心ノードの子に抗力ノードを追加する。{..省略..//抗力ノードを作成する。SKFieldNode.dragField()//抗力ノードの名前を設定する。"drag"//抗力ノードのカテゴリマスクを設定する。0b0001//中心ノードを取得する。SKSpriteNode//中心ノードの子に抗力ノードを追加する。Field(以下、線形重力ノード)」と同じなので、そちらを参照されたし。線形重力ノードの説明と異なる項目を説明する。Strength物理ボディの運動に対する抵抗力の強さを設定する。抵抗力であって、運動せずに止まっている物理ボディを引き寄せたり、遠ざけたりする力は働かない。マイナスにすると訳の分からない動きをする。SKActionのmoveメソッドなどの移動のアニメーションには抵抗力は発生しない。以下の動画は、左側がStrength「1」、右側がStrength「10」の動画https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_drag_field_strength_movie.mp4Falloff物理的効果の減衰率を設定する。抗力ノードから距離が離れると抵抗力が弱くなるということ。抗力ノードから見て物理ボディがどこにいても、抵抗力は物理ボディの進行方向の逆向きに働く。下図のように抗力ノードを通り過ぎた直後のボールへの抵抗力は離れた位置よりも強いが、下に向かって強い抵抗力が働くわけではなく、進行方向の逆方向に抵抗力が働く。以下の動画は左側がFalloff「0」、右側がFalloff「0.8」の動画。右側は出だしは速いが抗力ノードに近づくにつれ減速し、抗力ノードを過ぎると加速した。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_drag_field_falloff_movie.mp4以下の動画は、Falloffは「0.8」に設定したままで、画面左右端にボールを追加し同時に落下させたもの。左右のボールは抗力ノードから少し離れて落下するため、中央のボールよりも早く地面に着地する。【Swift】SpriteKitの使い方。2つの物理ボディをバネやスライドで結合する。...【Swift】SpriteKitの使い方。物理エンジンを使ってノードに重力をかける。...【Swift】SpriteKitの使い方。シーンエディタでノードのリサイズアクションを設定する。...【Swift】SpriteKitの使い方。物理ボディにバネをつけたかのように振動させる。...【Swift】SpriteKitの使い方。Transformationを使って画像をねじ曲げる。コメントをキャンセルメールアドレスが公開されることはありません。