2015-10-16 92 views
1

我有一個暫停系統的功能和一個按鈕,它工作完美,我知道什麼時候應用程序進入後臺它會自動暫停,當它回來它會自動取消暫停,我的問題是我不知道如何保持它再次變爲活動時暫停。Spritekit - 保持遊戲暫停時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 
} 

我試過這兩個方法分別但是比賽繼續運行,有時它顯示了我的暫停菜單(在遊戲上的層),並且仍然在後臺運行。那麼實現這一目標的正確方法是什麼?

回答

0

在您的場景或視圖,你應該能夠處理暫停加對它的觀測者

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

然後添加一個函數來處理這個

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

現在記住我發現在iOS 8中存在CBApplicationDidBecomeActive可能導致不良結果的錯誤,因此您需要在您的SKView類中重寫以下代碼:

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

當然,我有一個觀察者來對應通知,但是那個函數是什麼,它怎麼能覆蓋AppDelegate中的那個? – Abdou023

+0

Appdelegate作爲通知被調用時自動發送的通知被調用,因此skview在後臺調用該函數,並暫停混亂,基本上你正在做的是重寫它,以便它不會調用內部方法 – Knight0fDragon

+1

什麼是我在說的是CBDidBecomeActive不會覆蓋AppDelegate中的函數,它是一個自定義無關的函數。 – Abdou023