准备开个系列文章,一步一个脚印把学习SpriteKit 小游戏开发的点滴记录下来。废话不多说,我们开始吧。
目标
- 显示 "你好!"文案图标
- 点击屏幕对文案做一个放大渐变消失的动画,同时改变背景色
- 场景切换
简单介绍
-
可以通过点击xcode里面help菜单,打开dev documentation来查看,如下图所示
正文
核心代码如下,注意查看注释
import SpriteKit
class HelloScene: SKScene {
override func didMove(to view: SKView) {
backgroundColor = .orange
scaleMode = .aspectFit
// 将精灵添加到场景里
addChild(createLabelSprite())
}
func createLabelSprite() -> SKLabelNode {
let lbHello = SKLabelNode(fontNamed: "Chalkduster")
lbHello.text = "你好!"
lbHello.name = "LabelNode"
lbHello.fontSize = 48
// position设置很重要,若不设置 系统会默认设置成(0, 0),也就是左下角,无法正常显示
lbHello.position = view?.center ?? .zero
return lbHello
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 通过name获取某个子节点,可选绑定处理下,保证node不为空的情况下,做后续的处理
let node = childNode(withName: "LabelNode")
if let helloNode = node {
// 防止点击事件重复触发
helloNode.name = ""
let moveUp = SKAction.moveBy(x: 0, y: 100, duration: 0.5)
let zoom = SKAction.scaleX(to: 2, duration: 0.25)
let pause = SKAction.wait(forDuration: 0.5)
let fade = SKAction.fadeOut(withDuration: 0.5)
let remove = SKAction.removeFromParent()
let actionSeq = SKAction.sequence([moveUp, zoom, pause, fade, remove])
helloNode.run(actionSeq) {
// 执行完以上动画之后,转到ShipScene场景
let shipScene = ShipScene(size: self.size)
let transition = SKTransition.doorsOpenHorizontal(withDuration: 2)
// 呈现shipScene场景后,当前HelloScene场景会被销毁
self.view?.presentScene(shipScene, transition: transition)
}
let bgColorChange = SKAction.colorize(with: .purple, colorBlendFactor: 1, duration: 2)
run(bgColorChange)
}
}
}
敲完代码运行,发现是这样的,是的文字变形了。问题出在哪呢?
细心的你肯定发现了,问题就出在如下这句代码,将scaleX
改成scale
即可。
let zoom = SKAction.scaleX(to: 2, duration: 0.25)
最终效果
很简单的一个例子,最终呈现的效果如下: