I'm making a card game with Swift 4 and SpriteKit. I made a custom subclass of SKScene, and inside this class is a SKNode which I'm using as a layer (gameLayer), to which I attach all Nodes, which shall be stopped.
I also have made a button, which calls a function (pauseGame) that toggles isPaused of the gameLayer, which works perfectly.
The problem is: I want that when the game moves to the scene, it starts already stopped, the user shall begin the game by pressing a button. But when I call the pauseGame function inside the didMove function, it doesn't work, the gameLayer remains active.
I made some observations putting ' print (gameLayer.isPaused) ' and frame count inside the update function. It showed that actually the scene starts with gameLayer.isPaused set to true inside the didMove as it should be, but after the 2nd frame it gets set to false. I have really no idea where it can happen, as I don't appeal to gameLayer.isPaused anywhere else in code.
Of course a solution would be to call pauseGame after the 2nd frame, but I think its not a clean way.
class BMScene: SKScene {
let gameLayer = SKNode()
func pauseGame(){
if gameLayer.isPaused {
gameLayer.isPaused = false
} else {
gameLayer.isPaused = true
}
}
override func didMove(to view: SKView) {
self.pauseGame()
}