2015-10-16 1 views
1

J'ai un système de pause avec une fonction et un bouton et cela fonctionne parfaitement, je sais que lorsque l'application entre en arrière-plan, elle s'interrompt automatiquement et quand elle revient automatiquement se répète automatiquement, mon problème est que je ne sais pas comment l'arrêter quand elle redevient active.Spritekit - Gardez le jeu en pause quand didBecomeActive

func applicationWillResignActive(application: UIApplication) { 

    NSNotificationCenter.defaultCenter().postNotificationName("Pause", object: nil) // tried here 
}   


func applicationDidBecomeActive(application: UIApplication) { 

    NSNotificationCenter.defaultCenter().postNotificationName("Pause", object: nil) // tried here 
} 

J'ai essayé sur ces deux méthodes séparément, mais le jeu continue à courir, parfois, il montre mon menu Pause (une couche au-dessus du gameplay) et toujours en arrière-plan. Alors, quelle est la bonne façon d'y parvenir?

Répondre

0

Dans votre scène ou une vue, vous devriez être capable de gérer une pause en ajoutant un observateur à ce

NSNotificationCenter.defaultCenter().addObserver(self,selector:Selector("pauseGame:",name:"Pause",object:nil) 

Ensuite, vous ajoutez une fonction pour gérer cette

func pauseGame(notification:NSNotification) 
{ 
    self.paused = true; 
} 

Maintenant, gardez à l'esprit que je J'ai trouvé que dans iOS 8 il y a un bug où CBApplicationDidBecomeActive peut provoquer des résultats indésirables, donc vous devez remplacer ceci dans la classe de votre SKView comme ceci:

class GameSceneView : SKView 
{ 
    ...//Other Code 
    func CBApplicationDidBecomeActive() 
    { 
    } 
} 
+1

Bien sûr, j'ai un observateur pour correspondre à la notification, mais quelle est cette fonction et comment pourrait-elle remplacer celle de AppDelegate?! – Abdou023

+0

Appdelegate comme une notification qui est automatiquement envoyée quand est devenu actif est appelé, ainsi les appels skview qui fonctionnent dans les coulisses, et les dégâts avec la pause, essentiellement ce que vous faites est de le surcharger afin que la méthode interne ne soit pas appelée – Knight0fDragon

+1

Je dis que CBDidBecomeActive ne remplace pas la fonction dans AppDelegate, c'est une fonction sans rapport. – Abdou023