2012-11-25 67 views
0

我是新來的編程和Obj-c,並尋找一些清晰的問題,我有。我使用故事板來呈現我的遊戲的每個頁面,並且在主遊戲場景中,我有代碼在特定時間實例化遊戲結束屏幕,但是我擔心我調用新場景的方式不是正確的方式來獲得我所追求的。故事板場景遊戲結束屏幕

目前主場景繼續在Game Over屏幕下方運行,相反我希望它停止遊戲場景中的所有內容,只將分數值傳輸到Game Over頁面。

我當前的代碼加載遊戲在屏幕上:

-(void)goGameOver 
{ 
//Send to Game Over screen 
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"gameOverPage"]; 
vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentViewController:vc animated:NO completion:NULL]; 
} 

我希望我的目標是明確的,如果不是請讓我知道,我會嘗試改寫的東西。

回答

0

視圖控制器的工作方式是在「彈出」或「解散」之前,它們將繼續保持活動狀態。由於您在遊戲頁面上呈現模態視圖,因此遊戲頁面仍在記憶中,並且可以繼續按照您的要求進行操作。

一種非常常見的設計模式是,「底下」頁面 - 創建並呈現模態視圖控制器的頁面應該通過名爲protocol/delegate的機制解除它。它能做到這一點的唯一方法是,如果它仍然活躍並且因爲它仍然活躍 - 其他代碼也可以運行。

我不確定您的遊戲在「遊戲結束」視圖出現後會發生什麼?新遊戲是否可以啓動?如果是,他們從哪裏開始?無論如何,導航總是會因應用程序而異。

我想過的一個想法是返回到基本導航點,並將該起始頁和遊戲同時顯示在該控制器的頁面上,當遊戲結束時,將活動視圖控制器「彈出」回到根控制器它可以在遊戲中展示視角。那麼這樣,如果你想「重新開始」,一個簡單的「流行」或「解僱」就可以讓你回到開始你希望遊戲開始的地方。

要真正實現這一點,您需要一個UINavigationController。由於您提到您使用的是故事板和segues,因此排列連接到UINavigation控制器的視圖控制器很常見。

如果是這種情況,您可以使用標誌或對象來確定遊戲已經開始並使用相同的標誌來確定遊戲結束。

因此,例如,在你的導航堆棧中的第一個視圖控制器上你可能有一些像這樣的邏輯:

-(void)viewWillAppear:(BOOL)animated { 

    if(self.gameStarted == NO){ 
     self.gameStarted = YES; 
     [self performSegueWithIdentifier:@"startGame"]; 
} 
else { 
     self.gameStarted = NO; 
     [self performSegueWithIdentifier:@"endGame"]; 
} 

現在,你在哪裏,你決定比賽的關鍵是結束了,這一觀點控制器,它應該是在導航堆棧,你需要「啪」回這樣的第一控制器:

[self.navigationController popToRootViewControllerAnimated:YES]; 

我希望理念幫助以某種方式。有時候讓你的導航按照你想要的方式工作可能會很有挑戰性。