2

iPad で 2 人用のゲームを作りたいのですが、どうすればいいのかよくわかりません。私のコンセプトは、2 人用ゲーム (1 対 1) の「フルーツ忍者」のようなものです。

つまり、1 人のプレイヤーが viewcontrollerA でプレイし、もう 1 人が viewcontrollerB でプレイします (viewcontrollerA とは上下逆にする必要があります)。

どうすればいいですか?2 つのビュー コントローラーを作成し、コントローラー コンテインメントを介して表示する必要がありますか、それとも別のより良い方法がありますか? ありがとう!

4

2 に答える 2

6

iOS5 では、コントローラがオリエンテーション イベントを受信し、コールバックを追加/削除し、それらをレスポンダ チェーンに適切に挿入するための便利な方法があります。なので、やるならこれが一番です。2 つの UIViewController に同じビューを追加するなどのばかげたことをしない限り、問題ありません。

なぜそれをするのですか?ゲーム エンジンをマスター コントローラーに配置し、クライアントを作成し、そのクライアントを子ビュー コントローラーにカプセル化し、それを 2 人のプレイヤーに再利用するのは理にかなっていると思います。

そのようなことが必要だと感じた場合は、ネストされたコントローラーを使用して複雑さをカプセル化することもできます。例: 1 つはゲーム エンジンと通信するインターフェイス用で、もう 1 つはエンジンからイベントを取得する画面用です。

UIViewController コンテインメントは簡単です。6 つのメソッドを読み、何が何を呼び出すかを理解する必要があります。ドキュメンテーションを読むことは大歓迎ですが、一言で言えば:

  • addChildViewController:子ビュー コントローラーを追加します。子のビューを手動で追加する必要もあります: [self.view addSubView:chieldVC.view];
  • removeFromParentViewController子ビュー コントローラーを削除します。
  • transitionFromViewController...ビューを置き換えるか、ビューを前面に移動します。
  • willMoveToParentViewController:によって自動的に呼び出されaddChildViewController:ます。削除する場合にのみ呼び出します (コントローラーが孤立することを示すには nil を渡します)。カスタム コードを実行する必要がある場合にのみオーバーライドしてください。
  • didMoveToParentViewController:アニメーションが完了した後にこれを呼び出す必要がありますaddChildViewController(または、アニメーションがない場合はすぐに呼び出します)。
  • automaticallyForward.... ローテーションとアピアランスの呼び出しを手動で転送する場合にのみ、オーバーライドして NO を返します。

たとえば、あるコントローラーを別のコントローラーにネストするには、子のビューを通常のビューとして追加し、以下に示す順序で addChildViewController: および didMoveToParentViewController: を呼び出します。

// from the parent view controller
ChildViewController *child = [ChildViewController new];
[self addChildViewController:child];
[self.view addSubview:child.view];
[child didMoveToParentViewController:self];
于 2012-07-10T22:22:22.447 に答える
1

最善の方法は、画面全体を構成するルートビューコントローラーと、各プレーヤーの画面を構成する2つのサブビューを用意することです。ViewControllerをネストしたくない

于 2012-07-10T17:40:00.430 に答える