1

私は xna ゲームを作成していますが、描画や更新などを制御する多くのクラスが存在する予定です。

これらのクラスは、元の Game1 クラスのインスタンスにアクセスできる必要があるため、グラフィック デバイスとスプライト バッチなどを制御できます。

問題は、クラスのネットワーク、他のクラスを呼び出すクラス、およびチェーンの一番下にあるクラスが、グラフィック デバイスなどの Game1 クラスにアクセスできる必要があることです。

これを行う最善の方法は何ですか?Game1 をパラメーターとして渡し続けるだけですか、それとも何ですか?

4

2 に答える 2

3

ソフトウェア エンジニアリング/アーキテクチャの観点からの"正しい"答えは、必要な特定のリソースをパラメーターとしてメソッドに渡すことです。これには多くの利点があります。おそらく最大の利点は、コードのさまざまな部分を分離して、それぞれを独立して使用できるようにすることです。

例を挙げると、あなたは自分のゲームを持っているかもしれません。しかし、同じコードを使用して、エディター、単体テスト、またはその他のクレイジーなツールを作成したい場合があります。Gameこれらのケースの多くでは、クラスさえ持っていない可能性があります。(具体的な例を挙げると、私のこのビデオでは、同じゲーム コードを実行する 2 つの非常に異なる方法を示しています。これは、適切な分離がなければ不可能です。)

(これに基づいて、おそらく から派生したクラスよりも具体的なものを渡す必要がありますGame。)

バージョン管理/依存関係の要件がかなりオープンである場合は、さらに一歩進んで を渡すことができますIServiceProvider(たとえば、これは XNA が のコンストラクターに渡すものですContentManager)。この回答で、なぜこれを行うのかについて詳細な分析を行いました。

でも

サードパーティが使用するライブラリを作成していません。あなたはゲームを書いています。あなたのコードを使用するのはあなた自身のチームだけです。あなたはソース コードにアクセスでき、自由に変更できます。

これは、いくつかの近道を自由に取ることができることを意味します。

実際には、通常、ゲーム クラスの静的インスタンス、または (これは、何かを一緒に投げる場合に推奨する方法です) ゲーム クラスの静的プロパティを取得することで問題ありません。XNA では、実際にはゲーム クラスのインスタンスが 1 つしかないことがわかっています。

最初にこれを行うのは迅速かつ簡単です。また、後で「正しい」方法に切り替えるのも迅速かつ簡単です。あなたがそれに備えている限り。ここでは、適切なバージョン管理と Visual Studio での「すべての参照の検索」の使用が特に役立ちます。

基本的に: ショートカットを使用していること、なぜそれを使用しているのか、および「正しい」方法が何であるかを理解している限り、そのショートカットを使用しても問題ありません。

于 2012-08-02T06:58:56.813 に答える
0

game1 への静的参照をどこかに保持しておけば、すべてがそれを参照するのではないでしょうか?

于 2012-08-02T01:53:15.590 に答える