Reputation:
I have the following code to move an SKSpriteNode
.
let moveDown = SKAction.moveBy(CGVectorMake(0, -120), duration: 1)
let moveUp = SKAction.moveBy(CGVectorMake(0, +120), duration: 1)
let moveSequence = SKAction.sequence([moveDown, moveUp])
square.runAction(SKAction.repeatActionForever(moveSequence))
This moves the SKSpriteNode
up and down forever. Is there a way that I could pause this SKAction
? So that the SKSpriteNode
will freeze in its current position, and then later when I decide, continue its movement?
I only want to pause the movement of this SKSpriteNode
. I do not want to pause the SKScene
. Just the movement of this 1 SKSpriteNode
Upvotes: 11
Views: 4643
Reputation: 19
SKNode.paused
has been renamed to SKNode.isPaused
.
You should be able to do the following:
Pause animation:
square.isPaused = true
Restart animation:
square.isPaused = false
Upvotes: 0
Reputation: 16827
An alternative to @Whirlwind 's answer, in case you have a bunch of actions that need to be paused that are not in a group and not just the movement, is to just pause the node itself. All SKNodes have a paused
property associated with it.
Ex.
square.paused = true
Update:
This property is now isPaused
. An example with this change would resemble below:
square.isPaused = true
Upvotes: 11
Reputation: 13665
You should run an action with key:
square.runAction(SKAction.repeatActionForever(moveSequence), withKey:"moving")
Then, use action's speed property to pause it:
if let action = square.actionForKey("moving") {
action.speed = 0
}
or to unpause it:
action.speed = 1
Upvotes: 12