2012-01-06 9 views
0

私はゲームの中で、ほとんどのマネージャが常駐するコアと呼ばれるクラスを持っています。ゲームが始まると、すべての私のリソース、言語データ、ビットマップ、サウンドがマネージャによってロードされるので、ここに移動します。クラスを複数のクラスに渡すにはどうすればよいですか?

その後、シーンマネージャが作成され、最初のシーンが初期化されます。

問題は、上位レベルのクラスからシーンなどの下位レベルのクラスにデータを共有することで発生します。

シーンが開始するとき、マネージャからビットマップとサウンドを要求する必要があります。ほとんどの場面では、言語に基づいてボタンを置くための言葉を調べる必要もあります。

私がこれを行う方法は、マネージャマネージャクラスの一種を持つことです。これは、ほとんどの場面で使用される各タイプのマネージャーで構築されます。これは現在のシーンへのポインタを渡すシーンマネージャに渡されます。

これは、新しいマネージャがあるたびに、マネージャマネージャのコンストラクタを変更し、シーンマネージャでいくつか変更する必要があることを意味します。

これを行うより良い方法はありますか?どのようにこの種のことが行われていますか?グローバル利用可能な機能とデータのために

おかげ

答えて

2

を呼び出すことができますので、これは、本当によく働きます。しかしそれが一般的だからといって、それが最善の方法であるとは限りません。

同じことを行う別の方法はdependency injectionです。クラスのコンストラクタは、必要なマネージャへのポインタをとります。これにより、すべての依存関係を1か所で収集できるというメリットがあり、マネージャのテストコードを簡単に置き換えることができます。

0

は、私はあなたのシングルトンパターンをお勧めします。 シーンごとに異なるデータが必要な場合は、マルチシングルトン(getInstance関数へのパス文字列)の使用や、javaのPropertyクラスなどの文字列/名前でデータにアクセスする関数を持つインターフェイスの作成を検討する必要があります。

+0

シングルトン?それは今アンチパターンではないですか? – Lalaland

+1

それはまだ広く普及していますが、なぜ私は解決策を拒否する必要があるのか​​分かりません。なぜなら、それはもう流行にそれほど多くないからです。 – Paranaix

+1

@paranaix:多分それはもう十分に良いとは考えられない理由があります.. – tp1

0

すべてのマネージャを保持するシングルトンclass Rootがあります。初期化中、Rootオブジェクトはすべてのマネージャを構築します。その後、すべてのマネージャーにget関数を追加することができます。

のどこコード内からあなたがこれを行うための最も一般的な方法は、シングルトンである

Root::getPtr()->getTextureManager()->whatever() 
関連する問題