Animation SpriteKit:删除操作时运行代码或块?
forAnimation SpriteKit:删除操作时运行代码或块?,animation,sprite-kit,skaction,sknode,Animation,Sprite Kit,Skaction,Sknode,forSKNode允许您在操作完成时运行块,但是如果通过removeAllActions取消/删除了操作,该怎么办? 取消操作不会从run函数调用完成块 当操作被取消/删除时,是否有回调或运行代码的方法?是,如果在操作完成之前删除操作,则完成块将不会运行。每份文件: run(:completion:)方法与run(:)方法相同,但在操作完成后,将调用块。仅当操作运行到完成时才调用此回调。如果操作在完成之前被删除,则永远不会调用完成处理程序 解决办法可以是: class YourSpriteNod
SKNode
允许您在操作完成时运行块,但是如果通过removeAllActions取消/删除了操作,该怎么办?
取消操作不会从run
函数调用完成块
当操作被取消/删除时,是否有回调或运行代码的方法?是,如果在操作完成之前删除操作,则完成块将不会运行。每份文件: run(:completion:)方法与run(:)方法相同,但在操作完成后,将调用块。仅当操作运行到完成时才调用此回调。如果操作在完成之前被删除,则永远不会调用完成处理程序
解决办法可以是:
class YourSpriteNode: SKNode {
func doSometingAtCompletionAction() {
//all your stuff
}
override removeAllActions() {
super.removeAllActions()
doSometingAtCompletionAction()
}
}
对不起,这是一个措辞拙劣的问题。:)是的,正如问题中所述,可以理解,完成块不会运行。问题是,当操作被取消/删除时,如何运行代码或某个块?哦,好的,明白了。因此,在这种情况下,您可能需要查看命名操作。对于命名操作,您可以使用
action(forKey:)
作为removeAllActions
之前的检查,以查看特定操作是否正在运行。就是这样,在调用removeAllActions
之前,您可以执行所需的任何操作。如果没有自定义的.run and.remove函数,我想不出这一点。为什么要在删除操作时调用代码?根据设计选择,您可能希望实际执行删除操作的对象调用删除操作,否则您可能会遇到这样的情况:您需要在不运行代码的情况下删除某个操作,但被迫执行该操作。@Knight0fDragon重置其属性已被操作修改的节点。当操作被取消和完成时(类似于UIView
中的animateWithDuration
)@Crashalot调用完成块会更干净,同样,这应该是导致删除的方法,有点像Simone的答案,只是稍微修改了一下。这是一个需要思考的复杂问题,这就是为什么我不想仅仅给出一个答案。