【Swift】SpriteKitの使い方。【Swift】SpriteKitの使い方。2020年6月16日SKActionとは本記事ではSKScene(以下、シーン)に配置したノードをSKActionを用いて状態変化させる方法を説明する。ノードの状態を変化させるためにノードに与えるアクションクラスのことである。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。⇒「テスト用プロジェクト」シーンに背景と鳥のノードを配置しておいた。このプロジェクトを変更し、画面タップで鳥ノードの状態が変化するようにする。以下のコードは変更前のTestScene.swift。TestSceneが現在シーンになったら、背景画像と鳥のノードをシーンに追加している。//背景画像のノードを作成する。//背景画像のサイズをシーンと同じにする。//背景画像の位置をシーンの中央にする。//鳥のノードを作成する。//鳥の位置をシーンの中央にする。//ノードをシーンに追加する。{//背景画像のノードを作成する。"mountain")//背景画像のサイズをシーンと同じにする。self.frame.size//背景画像の位置をシーンの中央にする。CGRectGetMidY(self.frame));//鳥のノードを作成する。"bird1")//鳥の位置をシーンの中央にする。CGRectGetMidY(self.frame));//ノードをシーンに追加する。self.addChild(backNode)self.addChild(birdNode)}}ノードの状態を変化させるのにはSKActionクラスを利用する。以下の例のように、目的別のSKActionインスタンスを取得し、ノードのrunActionメソッドの引数に与えてやればノードの状態が変化する。duration:時間)//アクションを実行する。birdNode.runAction(action)以下は、SKActionのメソッド。他にもたくさんのメソッドがあるので興味のある方は公式リファレンスを参照されたし。指定した座標(X,Y)に移動する。指定したX座標に移動する。Y座標には変化しない。指定したY座標に移動する。X座標には変化しない。現在位置から指定した長さ(ポイント)を移動する。現在位置から指定した長さ(ポイント)を移動する。指定した角度に回転する。現在角度からさらに指定した角度を回転する。指定した倍率まで拡大縮小する(1.0が等倍)。現在の倍率からさらに指定した倍率まで拡大縮小する。現在の倍率からさらに指定した倍率(X、Yを指定)まで拡大縮小する。指定した倍率まで水平方向に拡大縮小する。指定した倍率まで垂直方向に拡大縮小する。指定した幅まで画像を拡大縮小する。指定した高さまで画像を拡大縮小する。現在のサイズからさらに指定した幅と高さを追加したサイズまで拡大縮小する。1.0)タップした位置にノードを移動するTestScene.swiftに以下のメソッドを追加する。画面をタッチしたらtouchesBeganメソッドが呼び出されるので、SKActionを用いてタッチされた座標までノードを移動している。//タッチした座標を取得する。//タッチした位置まで移動するアクションを作成する。//アクションを実行する。{//タッチした座標を取得する。touches.first!.locationInNode(self)//タッチした位置まで移動するアクションを作成する。duration:1.0)//アクションを実行する。birdNode.runAction(action)}以下は実際のプレイ動画https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/spritekit_move_node_movie.mp4アクションを組み合わて同時に実行するタップした位置にノードを移動するだけでなく、移動している間に他のアクションも実行したいことがある。そんなときはgroupメソッドを使ってアクションを1つにまとめて実行する。先ほど追加したtouchesBeganメソッドを以下のように修正する。タッチした位置まで移動するアクションと、5回転するアクションと、サイズが1.2倍になるアクションをまとめて実行している。//タッチした座標を取得する。//移動、回転、拡大のアクションを作成する。//アクションをまとめる。//アクションを実行する。{//タッチした座標を取得する。touches.first!.locationInNode(self)//移動、回転、拡大のアクションを作成する。1.0)//アクションをまとめる。SKAction.group([action1,action2,action3])//アクションを実行する。birdNode.runAction(actionAll)}以下は実際のプレイ動画https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/spritekit_many_action_movie.mp4組み合わせたアクションを順番に実行する順番にアクションを実行する場合は、以下のコードのようにsequenceメソッドでアクションをまとめる。//タッチした座標を取得する。//移動、回転、拡大のアクションを作成する。//アクションをまとめる。//アクションを実行する。{//タッチした座標を取得する。touches.first!.locationInNode(self)//移動、回転、拡大のアクションを作成する。1.0)//アクションをまとめる。SKAction.sequence([action1,action2,action3])//アクションを実行する。birdNode.runAction(actionAll)}以下は実際のプレイ動画https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/spritekit_action_sequence_movie.mp4ノードをドラッグで移動する先ほど追加したtouchesBeganメソッドは削除して、以下のメソッドを追加する。指を画面に触れたまま移動したときにtouchesMovedメソッドが呼び出されるので、タッチされている座標までノードを移動している。このメソッドは指の位置が変わるたびに呼び出される。指と全く同じ座標にノードを移動すると指でノードが隠れて見えにくいので、指の位置から20ポイント上に移動するようにした。//タッチした座標を取得する。//タッチした位置まで移動するアクションを作成する。//アクションを実行する。{//タッチした座標を取得する。touches.first!.locationInNode(self)//タッチした位置まで移動するアクションを作成する。duration:0.1)//アクションを実行する。【Swift】SpriteKitの使い方。2つの物理ボディをくっつけたり、ピンやヒモで結合する。Sceneファイルの設定。カメラノードを使って画面をスクロールする。...【Swift】SpriteKitの使い方。タイトル画面、プレイ画面、結果画面の順番でシーンを切り替える。Sceneファイルの使い方。ストーリーボードのようにノードをマウスで運んで配置する。コメントをキャンセルメールアドレスが公開されることはありません。