0

私はプログラミングと Obj-c が初めてで、私が抱えている問題を明確にしたいと考えています。ゲームの各ページを表示するためにストーリーボードを使用しています。メインのゲーム シーンには、特定の時点でゲーム オーバー画面をインスタンス化するコードがありますが、新しいシーンを呼び出す方法が私が求めているものを得る正しい方法。

現在、メイン シーンはゲーム オーバー画面の下で実行され続けていますが、代わりにゲーム シーンのすべてを停止し、スコア値のみがゲーム オーバー ページに転送されるようにしたいと考えています。

ゲームオーバー画面をロードするための現在のコード:

-(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];
}

私の目的が明確であることを願っています。そうでない場合はお知らせください。言い換えてみます。

4

1 に答える 1

0

ビュー コントローラの動作は、「ポップ」または「破棄」されるまでアクティブであり続けるというものです。ゲーム ページにモーダル ビューを表示しているため、ゲーム ページはまだメモリ内にあり、必要に応じて処理を続行できます。

非常に一般的なデザイン パターンの 1 つは、「下」のページ (モーダル ビュー コントローラーを作成して提示したページ) が、プロトコル/デリゲートと呼ばれるメカニズムを介してそれを却下することになっているというものです。それができる唯一の方法は、それがまだアクティブである場合であり、まだアクティブであるため、他のコードも実行されている可能性があります。

「ゲームオーバー」ビューが表示された後、ゲームで何が起こるかわかりませんか? 新しいゲームを開始できますか? 開始できる場合、どこから開始しますか? いずれにせよ、ナビゲーションは常にアプリケーションごとに異なる可能性があります。

私が考えていたのは、ベースナビゲーションポイントに戻り、そのコントローラーから開始ページとゲームオーバーページの両方を表示し、ゲームが終了したら、アクティブビューコントローラーをルートコントローラーに「ポップ」して表示できるようにすることでしたゲームオーバービュー。次に、このようにして、「最初からやり直す」場合は、単純な「ポップ」または「却下」するだけで、ゲームを開始したい最初の場所に戻ります。

実際にそれを実現するには、UINavigationController が必要です。ストーリーボードとセグエを使用していると述べたので、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];

そのアイデアが何らかの形で役立つことを願っています。ナビゲーションを思い通りに機能させるのは難しい場合があります。

于 2012-11-25T20:24:40.620 に答える