SKAction 中的代码运行操作未执行
Posted
技术标签:
【中文标题】SKAction 中的代码运行操作未执行【英文标题】:Code inside SKAction run action not executing 【发布时间】:2016-12-21 01:42:50 【问题描述】:SKAction.run
操作中的代码块由于某种原因永远不会执行。
澄清一下,startAction
内部的两行由于某种原因从未运行,即使其他行确实运行。
在这些行上放置断点证明这些行永远不会执行。
有什么线索吗?
// Set first frame
let firstFrame = frames[0]
let animationNode = SKSpriteNode(texture: firstFrame)
animationNode.position = CGPoint(x: x, y: y)
// Set start action
let startAction = SKAction.run(
gAudio.playSound(file: .TestSound) // Never runs
self.animationLayer.addChild(animationNode) // Never runs
)
// Set rest of animation
let timePerFrame = 0.5
let animationAction = SKAction.animate(with: frames, timePerFrame: timePerFrame, resize: false, restore: true)
let removeAction = SKAction.removeFromParent()
let animationSequence = SKAction.sequence([startAction, animationAction, removeAction])
// Run animation
animationNode.run(animationSequence)
【问题讨论】:
run 是立即的,但是该块将进入队列并且不能保证在调用 run 的确切时间触发,因此一旦您触发它,下一个序列将触发,从而删除在运行中的任何事情发生之前从父节点获得节点 @Knight0fDragon 非常感谢,为什么不作为答案发布?这似乎解释了问题,不是吗? 仅当动画也没有运行时 @Knight0fDragon 仅在动画未运行时?您能否发布答案,因为如果您确定这些细节,它可以解释问题吗? animationAction 【参考方案1】:在将节点放置在场景中之前,不会为节点触发动作,您将面临先有鸡还是先有蛋的困境。您想在节点(鸡蛋)存在于世界中(鸡生出同一个鸡蛋)之后,将节点(鸡蛋)添加到场景(鸡)中。您需要将节点放置在场景中,然后节点才能运行这些操作。
将你的开始动作放在你的场景上,而不是你的节点上,它应该开始运行
【讨论】:
再次感谢!实际上,您的解释中似乎最有见地的部分是关于计时动作以及如何保证涉及run
动作的一系列动作。也想包括那一点?
不,因为它与您的问题无关,只会让人们感到困惑
@Knight0fDragon 你能帮我看看这篇文章吗。我已经有一段时间了***.com/questions/42602058/…以上是关于SKAction 中的代码运行操作未执行的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit - 对在多个 SKNode 上运行的多个 SKAction 进行排序
spritekit 如何在两个不同的节点上转换两个 SKAction