1
votes

I am creating my first game in SpriteKit. I am trying to pause my GameScene and then run some animations via SpriteKit. The issue was that if I pause the scene using self.view?.isPaused = true everything stops. After searching around I found that the way to do this is to add another node to the scene and make everything else that you want to pause, child nodes of that node. I am trying to do that but haven't been successful. This is the code that I have

var worldNode:SKNode?
override func didMove(to view: SKView) {
    worldNode = SKNode()
    self.addChild(self.worldNode!)

    let spriteNode:SKSpriteNode = SKSpriteNode(imageNamed: "red_ball")
    spriteNode.size = CGSize(width: 40, height: 40)
    spriteNode.physicsBody = SKPhysicsBody(circleOfRadius: 15)
    spriteNode.physicsBody?.isDynamic = true

    self.worldNode?.addChild(spriteNode)
    spriteNode.physicsBody?.applyImpulse(CGVector(dx: 10, dy: 10))


    self.worldNode?.isPaused = true
    //self.view?.isPaused = true
}

when I run this I see the ball moving on the screen which should not happen according to my understanding, since I am pausing the worldNode and the spriteNode is child node of that. If I use self.view?.isPaused = true to pause the scene, then the ball is stationary as expected. Am I missing something ? how can I add nodes to the worldNode and then just pause only those nodes by pausing worldNode. Thanks !

1
after posting this I realized that even pausing the child node directly with spriteNode.isPaused = true, does not pause it, maybe the nodes with impluses applied cannot be paused this way ? Looks like I need to find an alternative, maybe use UI animation instead, which will continue to work even if the scene is pausedcomatose

1 Answers

0
votes

Well one way to pause nodes moved by impulses and forces is certainly to pause the scene:

self.isPaused = true

but I would say that you want to have other nodes unpaused (eg. HUD elements) so you added your game elements into world node.

So one way to pause physics along with pausing the node is to pause the complete physics world, like this:

self.physicsWorld.speed = 0