【Swift】SpriteKitの使い方。放射重力ノードで物理ボディを引き寄せたり、遠ざけたりする。【Swift】SpriteKitの使い方。放射重力ノードで物理ボディを引き寄せたり、遠ざけたりする。Field(以下、放射重力ノード)」について説明する。SKFieldNodeとは、バネ運動や乱気流など様々な物理的効果を物理ボディに与えるノードである。放射重力ノードはSKFieldNodeの一種で、物理ボディを引き寄せる、または、遠ざける方向に加速させるノードである。放射重力ノードを使ってみる実際に放射重力ノードをシーンに配置して物理ボディを加速させてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。事前準備では月と3個のロケットをシーンに配置しておいた。この時点では何も起きない。下図赤枠のSKSファイルを選択してシーンエディタを開く。Field」をシーンに配置する(紫矢印)。Maskに「1」を入力、Enabledのチェックを外す。Maskに「1」を入力する。茶ロケット、赤ロケットも同じ「1」に設定する。MaskのビットマスクのAND演算結果が0以外になるので、ロケットは放射重力ノードの影響を受けるようになる。⇒「ビットマスクとは」TestScene.swiftのtouchesBeganメソッドを以下のコードに変更する。「gravity」の前にスラッシュスラッシュが付いている理由は次の記事を参照されたし。//放射重力ノードを取得する。//物理的効果を有効にする。{//放射重力ノードを取得する。SKFieldNode//物理的効果を有効にする。true}以下は実際のプレイ動画。ロケットが月に向かって加速するようになった。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_radial_gravity_attract_movie.mp4ソースコードで実装する。放射重力ノードをシーンエディタではなく、ソースコードで実装する場合は以下のコードのようにする。試してみる場合は、先ほどシーンエディタで追加した放射重力ノードを削除してから行うこと。//放射重力ノードを作成する。//放射重力ノードの名前を設定する。//放射重力ノードのカテゴリマスクを設定する。//放射重力ノードの物理効果を無効にする。//月ノードを取得する。//月ノードの子に放射重力ノードを追加する。{..省略..//放射重力ノードを作成する。SKFieldNode.radialGravityField()//放射重力ノードの名前を設定する。"gravity"//放射重力ノードのカテゴリマスクを設定する。0b0001//放射重力ノードの物理効果を無効にする。false//月ノードを取得する。SKSpriteNode//月ノードの子に放射重力ノードを追加する。moonNode?.addChild(gravityNode)}放射重力ノードを移動する放射重力ノードをドラッグで移動させるとロケットはどのような動きをするか試してみよう。TestScene.swiftに以下のメソッドを追加する。//ノードを取得する。//タッチした座標を取得する。//タッチした位置まで移動するアクションを作成する。//アクションを実行する。{//ノードを取得する。SKSpriteNode//タッチした座標を取得する。touches.first!.locationInNode(self)//タッチした位置まで移動するアクションを作成する。duration:0.1)//アクションを実行する。moonNode!.runAction(action)}以下は実際のプレイ動画。ロケットが月を追いかけるようになった。ノードと意味が若干異なる項目を説明する。Strength加速の強さを指定する。プラス値の場合は放射重力ノードに向かって物理ボディが加速し、マイナス値の場合は放射重力ノードから遠ざかる方向に物理ボディが加速する。以下はStrengthを「-1」に設定した場合のプレイ動画。ロケットが月から逃げる。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/09/spritekit_radial_gravity_sekiryoku_movie.mp4ちなみに、月とロケットを衝突させないようにした場合は、以下の動画のようになる。ロケットは放射重力ノードの位置で急激に加速して遠くに向かって飛び出したり、放射重力ノードの周りをクルクルをまわるのが面白い。【Swift】SpriteKitの使い方。SKCropNodeで画像やシーンの一部分を切り出して表示する。...【Swift】SpriteKitの使い方。ノードをシーンに追加してゲーム画面を表示する。本記事からSpriteKitの説明を開始する。...【Swift】SpriteKitの使い方。物理ボディにバネをつけたかのように振動させる。...【Swift】SpriteKitの使い方。シーンエディタでノードのリサイズアクションを設定する。...【Swift】SpriteKitの使い方。2つの物理ボディをくっつけたり、ピンやヒモで結合する。コメントをキャンセルメールアドレスが公開されることはありません。