2011-01-24 8 views
0

私はXNAでプログラミングしていますので、クラスとコードの整理に関する助けが必要です。 私はボタンクラスとボタンマネージャを持っています。 私はシーンクラスとシーンマネージャも持っています。複数のxnaゲームコンポーネントを編成するにはどうすればよいですか?

ボタンマネージャは、ほぼすべての画面にボタンがあるため、異なる画面に描画される異なるボタンを処理します。 シーンマネージャは、ボタンを処理する代わりに、描画する必要のあるバックグラウンドシーンオブジェクトを処理する以外は、同じことを行います。 両方のマネージャは、現在のゲーム状態に応じて、描画するボタンまたはシーンオブジェクトを決定します。

両方のマネージャーが現在のゲーム状態を知るように、コードをどのように整理すればよいですか? (両方のマネージャはメインゲームクラス内でインスタンス化され、両方のマネージャはゲームコンポーネントです)

答えて

2

あなたがその探しているキーワードは、あなたの問題はXNAのウェブサイトはそれにいくつかの良い記事が掲載されています、この1必ずお読みください「ゲームの状態管理」で説明しています。もっと直接あなたの質問に答えるために今http://create.msdn.com/en-US/education/catalog/sample/game_state_management

を。 は、まずセットアップ引き分けに法と国家というクラスを作成し、正しいUI要素を更新 - ゲーム

-menu あなたは2つの異なる状態を持っていると言います。

Stateから派生したMenuStateを作成し、設定、描画、更新メソッドをオーバーライドします。セットアップメソッドでは、正しいメニューを生成するためにすべてのコードを配置します。 (Like Scene.MenuItems.Clear(); Scene.MenuItems.Add(新しいラベル(..));など)。更新と描画のメソッドを同じにします(各コントロールの更新と描画、ボタンのクリックによるイベントのキャプチャなど)

GameStateで同じ操作を行います。

シーンコードでは、「状態状態」のフィールドを作成します。ユーザがエスケープセット状態を(新しい)MenuStateに押したとき。ユーザーが(新しい)GameStateにゲームセットの状態に戻るとき。シーンの更新と描画のメソッドでstate.Update(..)とstate.Draw(..)を呼び出します。 GameStateとMenuStateでこれらのメソッドをオーバーライドしたので、正しいアクションが実行されます。

このアプローチでは、 "if(scene.StateEnum == StateEnum.SomeState){DoThis();}"のようなチェックを行う盛大なコントロールを持つという問題を解決しています。この方法で簡単に管理できます。

他の概念クラスを作成することも考えてください。 MenuStateのように、 "Options menu"というサブ状態を持つことができます。多分、フォームクラスなどを考えてみてください。

0

SInce GameComponentにはGameプロパティがあります。これを使用してGameクラスにキャストするか、またはGame Status 。

関連する問題