0

同じメイン ゲーム ループから実行されるゲーム内でさまざまなゲーム タイプを処理するための優れた戦略があるかどうか知りたいです。つまり、3 つの異なるゲーム タイプのゲームがあります。各タイプにはわずかな違いしかないため、現在は同じループ/クラスを使用して実行されています。1つは「時間切れまでにXを何個取れるか」、もう1つは「Xを10個取るのにどれくらいかかるか」、そして最後は「練習/無限時間」のゲームタイプです。現時点での私の戦略は、if、then、else を実行して、ゲームのすべての差別化部分をチェックし、ゲームの種類ごとに適切なロジックを実行することです。

if (gameType == INFINITE)
{...}
else if (gameType == TIMED)
{...}
else
{...} 

これは私にはひどく間違っているように思えますし、非効率的でもあります。このチェックを一度実行して先に進むことができると思われる場合に、これらすべての不要なチェックで CPU を停止させたくありません。また、すべてのクラスをコピーして貼り付けて、それぞれに小さな変更を加えるだけにしたくありません。これを行う良い方法はありますか?

4

1 に答える 1

3

これを処理する 1 つの方法は、スクリーン マネージャー システムを作成することです。これは基本的に、更新操作と描画操作を備えた抽象クラスがあることを意味します。あなたが持っている各ゲーム (画面) はこれから継承し、それぞれに独自の更新/描画動作を持たせることができます。最終的には、if-else または switch ステートメントを使用して、どちらを描画/更新するかを決定する必要があります。これを最小限に抑える 1 つの方法は、抽象型の変数を使用して現在の「画面」を追跡することです。次に、更新/描画する必要がある画面をその変数にポリモーフィックに割り当てることができます。次に、現在の画面で更新または描画を呼び出すときに、それが具象型であることを知る必要はありません。

そこにはたくさんの例があり、適切な XNA の例は http://xbox.create.msdn.com/en-US/education/catalog/sample/game_state_managementにあります。

アイデアは完全に譲渡可能です。ほとんどの場合、このシステムを使用してメニュー画面などを追加しますが、目的に使用できない理由はありません。

于 2013-03-06T18:42:59.393 に答える