Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation SpriteKit:删除操作时运行代码或块?_Animation_Sprite Kit_Skaction_Sknode - Fatal编程技术网

Animation SpriteKit:删除操作时运行代码或块?

Animation SpriteKit:删除操作时运行代码或块?,animation,sprite-kit,skaction,sknode,Animation,Sprite Kit,Skaction,Sknode,forSKNode允许您在操作完成时运行块,但是如果通过removeAllActions取消/删除了操作,该怎么办? 取消操作不会从run函数调用完成块 当操作被取消/删除时,是否有回调或运行代码的方法?是,如果在操作完成之前删除操作,则完成块将不会运行。每份文件: run(:completion:)方法与run(:)方法相同,但在操作完成后,将调用块。仅当操作运行到完成时才调用此回调。如果操作在完成之前被删除,则永远不会调用完成处理程序 解决办法可以是: class YourSpriteNod

for
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的答案,只是稍微修改了一下。这是一个需要思考的复杂问题,这就是为什么我不想仅仅给出一个答案。