2014-09-13 10 views
5

ho riuscito a mettere in pausa un gioco di scena con questo codice:Come mettere in pausa completamente un gioco? SpriteKit/SceneKit [SWIFT]

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) 
{ 
    var touch:UITouch = touches.anyObject() as UITouch 


    pauseText.text = "Continuer" 
    pauseText.fontSize = 50 
    pauseText.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) 


    /* bouton play/pause */ 


    var locationPause: CGPoint = touch.locationInNode(self) 
    if self.nodeAtPoint(locationPause) == self.pause 
    { 
     println("pause") 
     addChild(pauseText) 
     pause.removeFromParent() 
     paused = true 


    } 
    if self.nodeAtPoint(locationPause) == self.pauseText 
    { 
     pauseText.removeFromParent() 
     paused = false 
     addChild(pause) 
    } 
} 

Ma ho un problema. A intervalli casuali il gioco crea oggetti e li visualizza sullo schermo. Quando metto in pausa il gioco, continua a creare oggetti in background e quando riprendo il gioco tutti gli oggetti creati durante la pausa appaiono nello stesso tempo sullo schermo.

Come posso risolvere il problema?

+1

Imposta scene.view.paused = vero o falso per mettere in pausa/riprendere la partita. – 0x141E

+0

Grazie! Funziona ma l'etichetta pauseText non appare. Come posso fare? – Haox

risposta

8

Non è possibile aggiungere SKLabelNode (o qualsiasi altra cosa) alla scena mentre SKView è in pausa. Dovrai tornare al ciclo di esecuzione in modo che il tuo testo venga aggiunto prima di mettere in pausa il gioco. Ecco un modo per farlo:

// Add pause text or button to scene 
addChild(pauseText) 
let pauseAction = SKAction.run { 
    self.view?.isPaused = true 
} 
self.run(pauseAction) 
+0

Funziona perfettamente !! Grazie mille !! Ho pensato a queste regole (aggiungi l'etichetta prima di mettere in pausa) ecco perché scrivo il codice per il testo prima del codice per mettere in pausa il gioco. Ma non pensavo che fosse necessario per fare un'altra funzione. Mi puoi spiegare? – Haox

+2

L'aggiunta di un nodo figlio alla scena non viene eseguita immediatamente. Viene aggiunto dopo il ritorno dai touchBegan. L'istruzione scene.view.paused viene eseguita immediatamente (o ha una precedenza più alta), quindi viene eseguita prima che il tuo SKLabelNode venga aggiunto alla scena. – 0x141E