2014-03-12 43 views
0

我的目標是讓我的遊戲優雅地處理暫時中斷(電話,Siri,短信,主頁按鈕被點擊)。我知道delegate.m文件中的- (void)applicationWillResignActive:(UIApplication *)application- (void)applicationDidBecomeActive:(UIApplication *)application是必需的。但是我不知道如何完成這個任務。我的遊戲在NSTimer上運行,我還有一個「分數」計時器,背景音樂和一個暫停和播放按鈕。處理遊戲進行到背景

我檢查了答案,但沒有和明確的解釋。我也看到了不尋常的選擇。我想知道最好的編程實踐來完成這件事。我是一個新手編程,所以清楚和準確的解釋(與代碼)將不勝感激。

謝謝。 :)

+1

這些計時器是在遊戲控制器中還是展開在不同的類中?你的暫停/恢復功能是否已經處理了所有的定時器? – Wain

+0

我經常做的事情是,當它執行resignActive時,將BOOL設置爲true,然後在每次循環檢查時都將NSTimer設置爲true,以確保BOOL在運行任何遊戲代碼之前不是真實的。 (但我很好奇當你真的點擊主頁按鈕並關閉一個應用程序似乎「停止」......我不知道蘋果如何做到這一點,我們可以在用戶沒有真正退出應用程序的情況下模擬該代碼嗎?) –

+0

是的,他們在遊戲控制器中。我的暫停和恢復按鈕可處理所有計時器,但是如何將暫停/恢復代碼實施到appDelegate.m中而不會出現錯誤?試圖在appDelegate.m中實現pasue/resume導致錯誤「沒有可見的@interface for'AppDelegate''聲明選擇器'pauseButton'。 – JakeFromStateFarm

回答

1

在你AppDelegate.m,張貼的通知上willResignActive:像這樣。

- (void)applicationWillResignActive:(UIApplication *)application { 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"willResignActive" object:nil userInfo:nil]; 
} 

然後,在需要的地方,您可以添加如下所示的觀察者。現在,只要應用程序離開前臺,該viewController的pauseButtonClicked方法將被調用。

-(void)viewDidAppear:(BOOL)animated { 

    [super viewDidAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pauseButtonClicked:) name:@"willResignActive" object:nil]; 
} 

不要忘記在不再需要時刪除觀察者。

-(void)viewDidDisappear:(BOOL)animated { 

    [super viewDidDisappear:animated]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"willResignActive" object:nil]; 
} 
+0

aw man你是一個救命的人,非常感謝你!@eckyzero – JakeFromStateFarm

+0

隨時祝你好運! – eckyzero

1

比方說,您的暫停按鈕鏈接到-(IBAction)pauseButtonClicked {

就用:

- (void)applicationWillResignActive:(UIApplication *)application {//or whatever method you are using 
    [self pauseButtonClicked]; 
} 
+0

大概不是所有事情都在應用程序委託中運行,並且您希望觀察應用程序通知... – Wain

+0

是的,我的暫停按鈕鏈接到' - (IBAction)pauseButtonClicked'在我的viewController.m中,但是我允許添加'[self pauseButtonClicked]'到我的appDelegate.m文件?我收到一個錯誤。@ AlbertRenshaw – JakeFromStateFarm