iosswiftsprite-kit

Swift Pause Endless SKAction


I am currently making a flappy bird clone, and have a SKAction (runActionForever) in my didMoveTOView method. However, once I die, I want to terminate that action, by which is followed a popup screen.

override func didMoveToView(view: SKView) {
     var endlessAction = SKAction.runActionForever(spawn, delay)
 }

 func died() {
     endlessAction..... ?
     screenDied.position = CGPoint(self.frame.x / 2, self.frame.y / 2)
     addChild(screenDied)
 }

Now, in another function, died(), how do I end this action? - so I can then make a screen popup.

Thanks!


Solution

  • SKAction Class Reference : https://developer.apple.com/documentation/spritekit/skaction

    SKNode Class Reference : https://developer.apple.com/documentation/spritekit/sknode#//apple_ref/occ/instm/SKNode/runAction:withKey:

    Adding Actions to Nodes : https://developer.apple.com/library/archive/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/AddingActionstoSprites/AddingActionstoSprites.html

    To cancel actions that a node is running, call its removeAllActions method. All actions are removed from the node immediately. If a removed action had a duration, any changes it already made to the node remain intact, but further changes are not executed.

    Normally, you can’t see which actions a node is executing and if you want to remove actions, you must remove all of them. If you need to see whether a particular action is executing or remove a specific action, you must use named actions. A named action uses a unique key name to identify the action. You can start, remove, find, and replace named actions on a node.

    If you need to remove all actions from your node, you can use the removeAllActions method. However, if you need to remove a specific action you need to run it with the method named runAction:withKey:.

    If an action with the same key is already running, it is removed before the new one is added.

    Also, you can use actionForKey: to see if an action is running on a specific node.

    Then use removeActionForKey: to remove the action.

    PS : If you're looking to pause the actions and the node itself, you might want to look for the paused property on your node.