1

次のビュー シーケンスを持つ単純なゲームを作成しています。

メニュー -> 難易度選択 -> ゲーム -> ゲームオーバー -> メニュー

最初の 4 つの遷移は次のように行われます。

- (IBAction)newGame {
    // Transition to select difficulty view controller.
    [self presentModalViewController:[[SelectDifficultyViewController alloc] init] animated:YES];
}

GameOver ビューからメニュー ビューに遷移し、GameOver ビュー、Game ビュー、および SelectDifficulty ビューを閉じて割り当てを解除し、アニメーション化されたトランジションを 1 つだけ表示する最善の方法は何でしょうか?

4

1 に答える 1

1

最良の方法には、ダイアログ コードのリファクタリングが含まれる場合があります (注: ここで最良の方法を提示するとは主張していません。議論の原因となるため、最良の方法を尋ねるべきではありません)。モーダル ダイアログは、長く使い続けることを意図したものではありません。ユーザーが難易度を選択できるようにしてから、ゲームのダイアログを非表示にします。ゲーム オーバー画面は、メイン アプリケーション ウィンドウ上のダイアログにすることもできます。

以下のオプションのうち、1 はアプリケーションのすべての状態への即時アクセスを提供しますが、2 はゲーム ロジックをメニュー ナビゲーション/設定ロジックから分離するため、ベスト プラクティスに近くなります。


オプション 1: メニュー ビューとゲーム ビューを 1 つのビュー コントローラーに結合する

メイン ウィンドウのビュー階層は次のようになります。

UIView (root view) --- UIView (menu layer) --- (all of your menu subviews)
                   \-- UIView (game layer) --- (all of your game subviews)

新しいフローは次のようなものになります

メイン ビュー (メニュー レイヤー) -> 難易度選択 (モーダル) -> メイン ビュー (ゲーム レイヤー) -> ゲーム オーバー (モーダル) -> メイン ビュー (メニュー レイヤー)

ゲーム オーバーからメニューへの遷移は次のようになります。

  1. これらは両方とも、1 つのアニメーション ブロック内で発生します。

    a) ゲーム オーバー ダイアログ アルファ ->0.0f

    b) メニュー レイヤー アルファ ->1.0f

  2. dismissModalViewControllerAnimated(false)基になる操作を実行する


オプション 2: メニュー ビューとゲーム ビューに別のビュー コントローラーを用意する

メイン ウィンドウのビュー階層は次のようになります。

UIViewController (root) --- UIView (menu view) --- (all your menu subviews)
UIViewController        --- UIView (game view) --- (all your game subviews)

UIWindowrootViewControllerプロパティを設定することで、アクティブなView Controllerを切り替えることができます。

新しいフローは次のようなものになります

メニュービュー -> 難易度選択 (モーダル) -> ゲームビュー -> ゲームオーバー (モーダル) -> メニュービュー

ゲーム オーバーからメニューへの遷移は次のようになります。

  1. これらは両方とも、1 つのアニメーション ブロック内で発生します。

    a) ゲーム オーバー ダイアログ アルファ ->0.0f

    b)rootViewControllerメニュー表示に設定

  2. dismissModalViewControllerAnimated(false)基になる操作を実行する

于 2012-08-28T04:42:30.713 に答える