Help us understand the problem. What is going on with this article?

SpriteKit学習のメモ(アクションの設定)

More than 1 year has passed since last update.

アクションを用いてスプライトに動きをつける

アクション(SKAction)とは?

ノード(Node)に動きをつけたい場合に、アクションを使う。アクションは、アクションを適用したノードの位置や回転、スケールなどといったプロパティを段階的に変化させることで実現している。

基本的な使い方

1、メソッドを使ってSKActionのインスタンスを生成する
2、アニメーションさせたいSKNodeのrunActionメソッドに、SKActionのインスタンスを渡す
(ex)基本的な使い方↓

Sample.swift
// sample.pngイメージを生成
var player = SKSpriteNode(imageNamed: "sample")

// 1秒かけてサイズを2倍にするSKActionを生成
let act = SKAction.scale(to: 2.0, duration:1.0)

// 対象ノードに渡して実行
player.runAction(act)

SKActionクラスには、「動きをつけるメソッド」「効果をつけるメソッド」「拡大・縮小を行うメソッド」「透過を行うメソッド」「順序制御を行うメソッド」などもある。
 これらのサンプルをもとに、宇宙船からレーザー光線が発射されるアクションを実装↓

GameScene.swift
  override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        // タッチ終了後に定数missileでheroからのみレーザー光線を宣言
        let laser = SKSpriteNode(imageNamed: "laserBlue01")
        laser.name = "laser"
        laser.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "laserBlue01"), size: laser.size)
        laser.physicsBody?.affectedByGravity = false
        laser.physicsBody?.categoryBitMask = 4
        laser.physicsBody?.collisionBitMask = 2
        laser.physicsBody?.contactTestBitMask = 1
        laser.position = CGPoint(x: self.hero.position.x, y: self.hero.position.y + 50)
        self.addChild(laser)
        // SKActionクラスを用いてアクションを作成
        let moveToTop = SKAction.moveTo(y: frame.height + 10, duration: 0.3)
        // SKActionクラスを用いてアクションを取りやめるアクションを作成
        let remove = SKAction.removeFromParent()
        // 2つのアクションを交互に呼び出すことでレーザー光線をうったり、やめたりすることが可能になる
        laser.run(SKAction.sequence([moveToTop, remove]))
    }

タッチが終了した時点でレーザー光線が発射できる」を実装したいため、touchesEndedメソッド内に記述する。

詳しい説明は、また後日記載します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away