0


0

XNAでは、 GameComponent`ではないオブジェクト用に GameService`を作成することは受け入れられますか? 私は GameService`が GameComponent`にアクセスする方法を意図していることを知っています、しかしあなたがアクセスを提供しようとしているオブジェクトがすべての更新サイクルで更新する必要がないならどうですか? 例えば、 SpriteBatch.Begin()`の `Matrix`を計算できる Camera2D`オブジェクトがあります。 カメラの位置、回転などはゲームコードによって更新されるため、カメラ自体を更新する必要はありません。

GameService`を作成するために必要なのは型とプロバイダオブジェクトだけなので、プロバイダオブジェクトは GameComponent`を拡張する必要はありませんが、これは受け入れられる方法ですか? もっと良い方法はありますか?

1 Answer


1


サービスはGameComponentでもある必要はありません。 GraphicsDeviceManagerをご覧ください。GraphicsDeviceServiceを提供し、GameComponentではありません。 ゲームサービスコンテナは、オブジェクトを疎結合するためのものです。

ICamera2Dインターフェイスを作成し、Camera2Dクラスにそれを実装させ、Game.ServicesでCamera2DのインスタンスをICamera2Dのサービスプロバイダーとして登録します。 その後、そのインターフェースを使って他のクラスのCamera2Dインスタンスと通信します。 つまり、ある時点でOtherCamera2Dに変更する必要がある場合は、Camera2Dのインスタンスではなくサービスコンテナに登録するだけでよく、他のクラスを変更する必要はありません。