2017年8月18日金曜日

SKAction を使って SKNode を動かしてみた

概要

前回 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 です
skaction1.png

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 を使うことで実現することができます

動作確認

実行すると以下のように動作します
skaction2.gif

最後に

Swift3 で SKAction を使って SKSpriteNode をいろいろと動かしてみました
他にも SKAction のメソッドはたくさんあるので試してみると良いと思います
https://developer.apple.com/documentation/spritekit/skaction

参考サイト

0 件のコメント:

コメントを投稿