【Swift】SpriteKitの使い方。シーンエディタでノードの回転アクションを設定する。(Swift 2.2、XCode 7.3)
シーンエディタで回転
本記事ではSpriteKit Sceneファイルの編集画面(シーンエディタ)で設定できるRotate ActionとRotateToAngle Actionについて説明する。
Rotate ActionとRotateToAngle Actionは、シーンに配置したノードを回転させるアクションである。
SpriteKit Sceneファイル(以下、SKSファイル)の作り方については次の記事を参照されたし。⇒「SpriteKit Sceneファイルの使い方」
実際にノードにアクションを追加して回転させてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。⇒「テスト用プロジェクト」
事前準備では、背景と鳥のノードをSKSファイルのシーンに追加しておいた。
Rotate Action
下図赤枠のSKSファイルを選択してシーンエディタを開く。Animate横のボタン(黄緑枠)を押してタイムラインを表示する。水色枠のオブジェクトライブラリボタンを押して部品一覧を表示し、ドラッグ&ドロップで「Rotate Action」を鳥ノードのタイムラインまで運ぶ(紫矢印)。
黄枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Start Timeに「2」、Durationに「2」、Timing Functionに「Linear」、Degreesに「90」を入力する。
以下は実際のプレイ動画。鳥ノードが左回りに90度回転した。
アトリビュートインスペクタの内容を説明する。
Start Time
シーンが切り替わったタイミングから何秒後にアクションを実行するかを指定する。
Duration
アクションの所要時間を指定する。
Timing Function
回転の速さを以下のの4つから選択する。項目名は「Timing Mode」の間違いと思われる。
設定名 | 説明 |
---|---|
Linear | 一定速度で回転する。 |
Ease In | 加速しながら回転する。 |
Ease Out | 減速しながら回転する。 |
Ease In, Ease Out | 前半は加速し、後半は減速しながら回転する。 |
Degrees
回転角度を指定する。アンカーポイントを中心に回転し、プラスを指定した場合は左回り、マイナスを指定した場合は右回りになる。⇒「アンカーポイントとは」
360度を超えた場合は一周を超えて回る。以下の動画は、Degreesに900度を指定して実行した結果。900 ÷ 360 = 2.5周回転する。
このアクションは回転を追加するアクションである。例えば、90度回転のアクションを3回実行した場合は270度回転することになる。
ちなみに、上記と同じ動きをソースコードで実装するにはTestScene.swiftを以下のコードに変更する。ソースコードの場合は角度にラジアンを指定する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// // TestScene.swift // import Foundation import SpriteKit class TestScene:SKScene { //現在シーン設定時の呼び出しメソッド override func didMoveToView(view: SKView) { //SKSファイルに配置した鳥ノードを取得する。 let bird = self.childNodeWithName("bird") as? SKSpriteNode //2秒待機のアクションを作成する。 let action1 = SKAction.waitForDuration(2.0) //回転のアクションを作成する。 let action2 = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: 2.0) //一定速度で回転する。 action2.timingMode = SKActionTimingMode.Linear //アクションをまとめる。 let actionAll = SKAction.sequence([action1,action2]) //アクションを実行する。 bird?.runAction(actionAll) } } |
RotateToAngle Action
Rotate Actionは回転を追加するアクションなのに対し、RotateToAngle Actionはノードが非回転の状態を0度として、指定角度まで回転するアクションである。なので、同じ角度の回転を連続で実行しても意味はない。
以下の動画は、-90度回転のアクションを複数実行した結果。-90度から動かない。
以下の動画は1回目「-90度」、2回目「90度」のアクションを実行した結果。
ソースコードで実装する場合は、先ほどのソースコードのアクション作成箇所を以下のように変更する。
1 2 3 |
//回転のアクションを作成する。 let action2 = SKAction.rotateToAngle(CGFloat(M_PI_2), duration: 2.0) |