¿Cuál es la mejor forma de crear un menu de pausa?

Quiero hacer un menu que se active al tocar un SKSpriteNode, luego pausas todo en mi juego, excepto el button de reanudar y reiniciar, y también se activa cuando el usuario abandona la aplicación.

Actualmente estoy haciendo esto al tener una llamada bool isPaused y todos los methods solo se activan cuando isPaused se establece en NO. Cada vez que se toca el nodo de pausa, se establece en SÍ y todo se detiene. Esto, sin embargo, me causa muchos problemas, por ejemplo, cuando se llamó a EnterBackground, hago que llame al método que pausa la escena, pero cuando vuelve a abrir la aplicación, el menu de pausa no está allí.

Quiero saber cuál es la mejor manera de hacerlo.

Recomendaría utilizar un nodo 'juego de capa'. Es como un súper nodo que contiene todos los nodos de tu juego.

El truco es que si llamas a gameLayer.paused = true, todos los subnodos también se detendrán, porque la function de pausa funciona recursivamente.

por ejemplo:

Swift :

var gameLayer = SKNode() var node1 = SKSpriteNode() var node2 = SKSpriteNode() var specialNode = SKSpriteNode() gameLayer.addChild(node1) gameLayer.addChild(node2) gameLayer.pause = true //node1 and node2 will pause also 

C objective

 SKSpriteNode *node1 = [SKSpriteNode new]; SKSpriteNode *node2 = [SKSpriteNode new]; SKSpriteNode *specialNode = [SKSpriteNode new]; [gameLayer addChild: node1]; [gameLayer addChild: node2]; gameLayer.paused = TRUE; 

Ahora puedes llamar a gameLayer.paused = true donde quieras y pausar todos los nodos a la vez.

Para continuar con su pensamiento, use BOOL en el método de actualización de esta manera:

 -(void)update:(CFTimeInterval)currentTime { if(isPaused) { // handle only processing during a pause } else { // handle processing while not paused } } 

Mira mi pregunta aquí: didBecomeActive un-pauses game

Puedo ver si puedo publicar mi código (en NDA) cuando llegue a mi computadora. La respuesta funciona, y mi comentario sobre agregar un timer funciona bien también.