如何在变量更改时停止在 DidMove 上调用的 SKAction
How to stop SKAction called on DidMove when a variable changes
所以当我的场景开始时,我正在加载并 运行 一个动画,但有一点我想停止我的动画。我明白为什么它不起作用,但我找不到解决它的方法。我已经尝试覆盖 func update,但我找不到正确的方法(如果有的话)来更新我的函数。
override func didMove(to view: SKView) {
loadAnimation(atlasName: "test")
runAnimation(spriteName: "testImg", timeFrame: 0.08)
}
func loadAnimation(atlasName : String) {
let spriteAtlas = SKTextureAtlas(named: "\(atlasName)")
for index in 1...spriteAtlas.textureNames.count{
let image = String(format: "\(atlasName)%01d", index)
atlasAnimation += [spriteAtlas.textureNamed(image)]
}
}
func runAnimation(spriteName : String, timeFrame : Double) {
let spriteNode = self.childNode(withName: "\(spriteName)")
spriteNode?.name = "\(spriteName)"
if (spriteNode != nil) {
let animation = SKAction.animate(with: atlasAnimation, timePerFrame: timeFrame)
let forever = SKAction.repeatForever(animation)
spriteNode?.run(forever, withKey: "key")
if spriteNode?.name == "whatever" {
if i < 18 {
spriteNode?.removeAction(forKey: "key")
}
}
}
您可以使用 属性 观察器来完成此类任务:
var i = 50{
didSet{
if i < 18{
spriteNode.removeAction(forKey: "key")
}
}
}
这意味着每次 i
设置为另一个值时,都会调用 didSet 块。
所以当我的场景开始时,我正在加载并 运行 一个动画,但有一点我想停止我的动画。我明白为什么它不起作用,但我找不到解决它的方法。我已经尝试覆盖 func update,但我找不到正确的方法(如果有的话)来更新我的函数。
override func didMove(to view: SKView) {
loadAnimation(atlasName: "test")
runAnimation(spriteName: "testImg", timeFrame: 0.08)
}
func loadAnimation(atlasName : String) {
let spriteAtlas = SKTextureAtlas(named: "\(atlasName)")
for index in 1...spriteAtlas.textureNames.count{
let image = String(format: "\(atlasName)%01d", index)
atlasAnimation += [spriteAtlas.textureNamed(image)]
}
}
func runAnimation(spriteName : String, timeFrame : Double) {
let spriteNode = self.childNode(withName: "\(spriteName)")
spriteNode?.name = "\(spriteName)"
if (spriteNode != nil) {
let animation = SKAction.animate(with: atlasAnimation, timePerFrame: timeFrame)
let forever = SKAction.repeatForever(animation)
spriteNode?.run(forever, withKey: "key")
if spriteNode?.name == "whatever" {
if i < 18 {
spriteNode?.removeAction(forKey: "key")
}
}
}
您可以使用 属性 观察器来完成此类任务:
var i = 50{
didSet{
if i < 18{
spriteNode.removeAction(forKey: "key")
}
}
}
这意味着每次 i
设置为另一个值时,都会调用 didSet 块。