3

XNA で C# を使用してゲームを構築していますが、次の 4 つの方法のどれが読み取りアクセス専用の「ビューポート」を参照するのに最適かわかりません。

  1. Game.Viewport を呼び出して、すべてのクラスがアクセスできる public static 変数を用意します (Game がメイン クラスです。

    public static readonly Viewport Viewport = GraphicsDevice.Viewport;

使用中で:

rectangle = new Rectangle (Game.Viewport/2, ...
  1. ビューポートを必要とする各クラスのビューポートを参照するローカル変数を用意します。

    プライベート 読み取り専用 ビューポート viewport = GraphicsDevice.Viewport;

使用中で:

rectangle = new Rectangle (viewport/2, ...
  1. ビューポートを必要とする各クラスのコンストラクターに渡されたローカル変数を使用します (これは、インポートされた Microsoft.Xna.Framework.Graphics を必要としなかった唯一のクラスです)。

    プライベート読み取り専用 Viewport ビューポート。

次に、コンストラクターで:

viewport = pViewport;

使用中で:

rectangle = new Rectangle (viewport/2, ...
  1. ビューポートが必要な (使用中の) どこでも、クラス ライブラリからビューポートを直接参照します。

    長方形 = 新しい長方形 (GraphicsDevice.Viewport.Width/2, ...

速度の点でどちらが最適で、読みやすさの点でどちらが最適かを考えています。個人的には、4 番目の方法が最も簡単で最速だと思うので、ビューポートへの参照を作成する必要はありません。グローバルなものを参照していることは明らかです。「仲介者」を排除しているように見えますが、ビューポートを使用するすべてのクラスに XNA グラフィック ライブラリをインポートする必要があります。

皆さんはどう思いますか?

4

1 に答える 1

1

あなたのデザイン次第だと思います。これが単純な 1 回限りのアプリケーションである場合は、最初の例を使用します。単一のビューポートがあり、どのクラスもに依存していGraphicsDeviceないか、そのビューポートを管理することにしました。

単一のオブジェクトをそこに格納し、コードで参照すると高速になります。これは単なるフィールド参照であるため、それよりもはるかに高速になることはありません。特にGraphicsDevice.Viewportプロパティであるため、毎回呼び出すということは、アクセスするたびにプロパティ getter メソッドを実行することになることを意味します。

EDIT:(フィールドの代わりに)プロパティラッパーをすばやくスローして、Game.Viewportアクセスを一時的に追跡できるようにする(たとえば、ログ記録のために)場合は、この方法で自由に実行できます。で後者を選択した場合GraphicsDevice.Viewport、それを呼び出すコード内のすべての場所でそれを行う必要があります (コードの重複)。

これがより再利用可能なライブラリ用である場合、ビューポートへのアクセスを関連するクラスのみに制限することが理にかなっGameている場合、または への依存関係を分離したい場合は、依存性注入としてコンストラクターを介して渡すことが価値がある場合があります。単体テスト。

GraphicsDevice.Viewportオプション 2 (各クラスをプライベート フィールドとして評価する) も考慮しません。少なくとも、独自の再利用可能な静的クラスでラップすることができます (これは、あなたが行っていることですGame)

于 2012-07-05T02:35:41.863 に答える