3

我正在 XNA 中使用 C# 构建游戏,但我不确定这四种方式中的哪一种最适合引用“视口”以进行只读访问:

  1. 有一个公共静态变量,每个类都可以通过调用 Game.Viewport 来访问(Game 是主类:

    public static readonly Viewport Viewport = GraphicsDevice.Viewport;

正在使用:

rectangle = new Rectangle (Game.Viewport/2, ...
  1. 对于需要视口的每个类,都有一个局部变量来引用视口:

    私有只读视口视口 = GraphicsDevice.Viewport;

正在使用:

rectangle = new Rectangle (viewport/2, ...
  1. 使用向下传递到需要视口的每个类的构造函数的局部变量(这将是唯一不需要导入 Microsoft.Xna.Framework.Graphics 的类):

    私有只读视口视口;

然后在构造函数中:

viewport = pViewport;

正在使用:

rectangle = new Rectangle (viewport/2, ...
  1. 在需要(使用中)的任何地方直接从类库中引用视口:

    矩形 = 新矩形 (GraphicsDevice.Viewport.Width/2, ...

我想知道哪个在速度方面最好,哪个在可读性方面最好。就个人而言,我觉得第四种方法是最简单和最快的,所以我不需要创建任何对视口的引用,很明显我指的是全局的东西。看起来它正在取消“中间人”,但随后您必须将 XNA 图形库导入到使用视口的每个类中。

你们有什么感想?

4

1 回答 1

1

我想这取决于你的设计。如果这只是一个简单的一次性应用程序,我将使用您的第一个示例。您有一个单一的视口,您的所有类都不依赖于GraphicsDevice您决定管理该视口的方式。

将单个对象存储在那里并在代码中引用它会很快;它只是一个字段参考,所以它们不会比这快得多。GraphicsDevice.Viewport每次都调用,尤其是因为它是一个属性,这意味着您每次想要访问它时都将运行一个属性 getter 方法。

编辑:如果您想快速在Game.Viewport(而不是字段)上放入属性包装器,以便您可以临时跟踪访问(例如用于日志记录),那么您可以自由地这样做。如果您选择后者GraphicsDevice.Viewport,则必须在代码中调用它的每个位置都执行此操作(代码重复)。

如果这是为了一个更可重用的库,如果将 Viewport 的访问限制为仅相关类是有意义的,或者希望将依赖项分离Game到单元测试。

我什至不会考虑选项 2(GraphicsDevice.Viewport将每个类评估为私有字段)。至少你可以用你自己的可重用静态类来包装它(这就是你正在做的Game

于 2012-07-05T02:35:41.863 回答