概要
前回 SpriteKit の簡単な使い方を紹介してみました
今回は SKAction を使って SKNode をいろいろと動かしてみたいと思います
環境は前回のものをそのまま利用します
環境
- macOS X 10.12.6
- Xcode 8.3.3 (8E3004b)
SKNode の追加
GemeScene.sks を編集して更に SKSpriteNode を追加しましょう
追加したらインスペクターから以下を編集します
[]
は入力している値です
- Sprite -> Name -> [block2]
- Sprite -> Texture -> [block2]
- Sprite -> Position -> Z -> 1
こんな感じで block3 も追加しましょう
以下のような感じになれば OK です
GameScene.swift でノードを動かす
では 3 つのノードを動かしましょう
GameScene.swift の didMove を以下のように編集します
override func didMove(to view: SKView) {
// block1
let block1 = self.childNode(withName: "block1") as? SKSpriteNode
let action1 = SKAction.moveTo(x: self.frame.width, duration: 1.0)
let action2 = SKAction.moveTo(x: -(self.frame.width), duration: 1.0)
let forever1 = SKAction.repeatForever(SKAction.sequence([action1, action2]))
block1?.run(forever1)
// block2
let block2 = self.childNode(withName: "block2") as? SKSpriteNode
let action3 = SKAction.moveBy(x: 100, y: 100, duration: 1.0)
block2?.run(action3)
// block3
let block3 = self.childNode(withName: "block3") as? SKSpriteNode
let action4 = SKAction.rotate(toAngle: (CGFloat(45.0 / 180.0 * Double.pi)), duration: 1.0)
block3?.run(action4)
}
簡単に説明します
まず 3 つのノードを childNode で取得しています
そのあとでアクションをそれぞれ作成します
今回は block1 からそれぞれ move(to:)
, moveBy
, rotate(toAngle:)
になります
move(to:)
は指定した座標にノードを移動させます
moveBy
は現在の座標から指定した座標分移動させます
そして rotate(toAngle:)
は指定した角度分回転させることができる Action になります
あとはアクションを作成したらノードの run
メソッドに指定すればアクションが実行されます
例えばアクションを無限ループさせたいことがあると思います
その場合は block1 に適用している repeatForever
を使うことで実現することができます
動作確認
実行すると以下のように動作します
最後に
Swift3 で SKAction を使って SKSpriteNode をいろいろと動かしてみました
他にも SKAction のメソッドはたくさんあるので試してみると良いと思います
https://developer.apple.com/documentation/spritekit/skaction
0 件のコメント:
コメントを投稿