我试图使用SpriteKit创建一个暂停菜单,以便在玩家继续游戏时在屏幕上进行动画处理(移动)。
我创建了一个SKAction并在开始运行时就这样运行它:
let duration = TimeInterval(0.5)
let moveAction = SKAction.move(to: CGPoint(x: 0, y: 495) , duration:
duration)
pauseScroll?.run(moveAction)
Run Code Online (Sandbox Code Playgroud)
pauseScroll初始化为:
weak var pauseScroll: SKSpriteNode?
override init(size: CGSize) {
...
let pauseScene = SKScene(fileNamed: "PauseMenu")!
pauseScroll = pauseScene.childNode(withName: "PauseScroll") as?
SKSpriteNode
pauseScroll?.position = CGPoint(x: 0, y: 495)
pauseScroll?.zPosition = 1000
pauseScroll?.move(toParent: self)
}
Run Code Online (Sandbox Code Playgroud)
我在这里要做的是将pauseScroll的UI放置在另一个spritekit.scene文件中,作为实际的GameScene,所有这些操作均在代码中完成。然后,我通过调用.move(toParent:self)将其添加到GameScene中。
事情是,我可以很好地引用pauseScroll,可以对其进行修改,例如更改其位置,为其指定物理身体和碰撞蒙版,在pauseScroll中包含的节点上注册水龙头等。看似一切都在其上运行了SKActions。
我同时为其他SKSpriteNode运行SKAction,它们运行良好,当然它们的初始化方式有所不同,因为它们都是在.init中的代码中设置的,例如:
var background: SKSpriteNode!
override init(size: CGSize) {
...
background = SKSpriteNode(imageNamed: "GameBackground")
background.size = size
addChild(background)
}
Run Code Online (Sandbox Code Playgroud)
然后,以与我在触摸中开始的其他任何操作相同的方式为它们设置动画:
let colorAction = SKAction.colorize(withColorBlendFactor: 0.4,
duration: duration)
background?.run(colorAction) …Run Code Online (Sandbox Code Playgroud)