2015-10-24 4 views
5

Va bene, quindi ho un gioco di kit sprite in Swift qui e ho problemi a riavviare il GameScene dopo il game over.Swift, spritekit: come riavviare GameScene dopo il gioco? Smettere di ritardare?

In questo momento, quando l'utente perde tutta la sua vita, una variabile gameIsOver è impostata su true, che mette in pausa nodi specifici all'interno della scena e imposta un timer. Dopo che questo timer termina, passo alla scena Game Over. Dalla scena Game Over, l'utente può tornare a casa o riavviare il gioco.

ecco come lo transizione al mio gioco sopra scena:

countdown(circle, steps: 120, duration: 5) { 

       //Performed when timer ends 
       self.gameSoundTrack.stop() 

       let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 
       let vc = mainStoryboard.instantiateViewControllerWithIdentifier("GOViewController") 
       self.viewController!.presentViewController(vc, animated: true, completion: nil) 

       //Resetting GameScene 
       self.removeAllChildren() 
       self.removeAllActions() 
       self.scene?.removeFromParent() 
      self.paused = true 
      gameIsOver = false 
     } 

mi soffermo la mia scena qui è perché, se non lo faccio, quando viene ricaricato GameScene gameIsOver è ancora impostato su true ei miei crash app . Non so perché ciò si verifica considerando che ho impostato gameIsOver a false qui.

Dopo il passaggio da GameScene al mio gioco sulla scena e ritorno a GameScene, o da GameScene al mio controller di visualizzazione di casa e ritorno a GameScene un paio di volte, il mio numero di fps è diminuito così tanto che l'intero gioco è in ritardo dove il gameplay è impossibile.

Questo mi porta a credere che non sto rimuovendo/eliminando GameScene correttamente ogni volta che presento il mio gioco sulla scena.
Credo di avere lo stesso problema di questo: In Swift on "game over" move from scene to another UIView and dispose the scene?, ma sono nuovo di questo e non riesco a capire come hanno risolto il loro problema.

Come posso ripristinare/eliminare completamente GameScene ogni volta che presento la mia scena Game Over per fermare il ritardo?

risposta

5

Il tuo giocoIsOver Bool non manterrà un valore mentre passi da una scena all'altra a meno che non lo crei come una struttura. Così, invece di

var gameIsOver = false 

dovrebbe essere

struct game { 
    static var IsOver : Bool = false 
} 

in modo che quando si cambia il valore come le cose accadono si chiama

game.IsOver = true 
//if your calling it in a different View controller or scene than where you created it just put the name before it like so 
GameViewController.game.IsOver = true 

Per quanto riguarda il passaggio di nuovo al vostro GameScene creare una funzione

func goToGameScene(){ 
    let gameScene:GameScene = GameScene(size: self.view!.bounds.size) // create your new scene 
    let transition = SKTransition.fadeWithDuration(1.0) // create type of transition (you can check in documentation for more transtions) 
    gameScene.scaleMode = SKSceneScaleMode.Fill 
    self.view!.presentScene(gameScene, transition: transition) 
    } 

poi ogni volta che vuoi reimpostare su GameScene basta chiamare

goToGameScene() 
+1

oh, quindi non c'è niente di sbagliato nel farlo? ri-chiamare la stessa scena più e più volte? Wow. Ho pensato che sarebbe stato un po '"pesante" per il motore di gioco. – msqar

+1

No, creerà una nuova scena e non si attaccherà alla scena precedente. Se si stesse utilizzando un controller di navigazione e si utilizza segues sarebbe diverso. Assicurati di contrassegnare la risposta come corretta se ti ha aiutato. –

+0

non sono il proprietario del post :(sfortunatamente non posso darti il ​​segno, ma tu mi hai aiutato con quello che ti ha dato il voto positivo – msqar