この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
今回は、SpriteKit の SKWarpGeometryGrid を少しだけいじってみようと思います。
これを使うと、ひしゃげたり、伸びたり、縮んだりするアクションが簡単にできるようです。
まず、キャラを配置します。
このキャラに、横に伸びて少しだけひしゃげる動きを付けてみます。
GameScene.swift
import SpriteKit
import GameplayKit
class GameScene: SKScene {
private var penguin: SKSpriteNode!
let sourcePositions = [
float2(0, 0), float2(0.5, 0), float2(1, 0),
float2(0, 0.5), float2(0.5, 0.5), float2(1, 0.5),
float2(0, 1), float2(0.5, 1), float2(1, 1)
]
let horizontalDestinationPositions = [
float2(-0.5, 0), float2(0.5, 0.2), float2(1.5, 0),
float2(-0.5, 0.5), float2(0.5, 0.5), float2(1.5, 0.5),
float2(-0.5, 1), float2(0.5, 0.8), float2(1.5, 1)
]
override func didMove(to view: SKView) {
penguin = self.childNode(withName: "penguin") as! SKSpriteNode
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let warpGrid = SKWarpGeometryGrid(columns: 2, rows: 2,
sourcePositions: sourcePositions,
destinationPositions: horizontalDestinationPositions)
let noWarpGrid = SKWarpGeometryGrid(columns: 2, rows: 2)
penguin.warpGeometry = noWarpGrid
let warpAction = SKAction.animate(withWarps:[warpGrid, noWarpGrid], times: [0.25, 0.5])
penguin.run(warpAction!)
}
}
SKAction.animate で、グリッドの配列と変形時間の配列をセットするだけで簡単にアニメーションさせることができます。
では、動かしてみます。
はい。ひしゃげました。
ごにょごにょと数値をセットしていますが、縦と横にそれぞれ2分割した座標を元に変形させることができるようです。
今回設定した値では、こんな感じにひしゃげさせています。
青字が変形前の sourcePositions で、緑字が変形後の horizontalDestinationPositions です。
ではでは。