[英]How to stop SKAction called on DidMove when a variable changes
因此,当我的场景开始时,我正在加载并运行动画,但是有一点我想停止动画,那就是当我的全局变量“ i”小于18时。我确实知道为什么无法正常工作,但我找不到解决方法。 我尝试覆盖函数更新,但是找不到正确的方法(如果有)来更新我的函数。 关于如何使被注释的部分起作用的任何想法? 我的意思是,我应该放在哪里?
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" {
//THIS PART WON´T WORK BECAUSE WHEN THE SCENE IS LOADED, i = 100
if i < 18 {
print("if statement!!!")
spriteNode?.removeAction(forKey: "key")
}
}
}
如果我覆盖了func更新,那么我的动画将永远不会开始,但是if语句确实起作用。 您可以看到“ if语句!!!” 在控制台上。 但是由于从一开始就没有任何动画效果,因此无法删除任何动作...
override func update(_ currentTime: TimeInterval) {
runAnimation(spriteName: "testImg", timeFrame: 0.08)
}
您可以将属性观察器用于此类任务:
var i = 50{
didSet{
if i < 18{
spriteNode.removeAction(forKey: "key")
}
}
}
这意味着每当i
设置为另一个值时,就会调用didSet块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.