【问题标题】:GraphicsDevice is null in my XNA Windows Game projectGraphicsDevice 在我的 XNA Windows 游戏项目中为空
【发布时间】:2011-02-17 07:08:52
【问题描述】:

我刚刚开始尝试用 XNA 3.1 制作一个简单的游戏来帮助自己学习 C# 和 XNA。然而,我遇到了一个有趣的问题。在所有教程中,都应该在实例化一个新的 spriteBatch 对象时传递 GraphicsDevice,如下所示:

spriteBatch = new SpriteBatch(GraphicsDevice);

甚至可以这样做:

GraphicsDevice objGraphics = new graphics.GraphicsDevice;
spriteBatch = new SpriteBatch(objGraphics);

其中 graphics 是 GraphicsDeviceManager。但是,无论我尝试哪个版本,当我尝试将 GraphicsDevice 对象传递给 spriteBatch 的构造函数时,总是会收到 ArgumentNullException。几乎我发现的每个教程都给出了第一个,只有一个提到了第二个选项。有没有其他人遇到过类似的错误或知道是什么原因造成的?我正在使用 Visual Studio 2008 在 Windows 7 x64 中工作。

编辑:

我似乎找到了问题所在。我试图在构造函数中执行该代码(这是我假设它应该去的地方)。我做了一些谷歌搜索,找到了答案here。感谢您的帮助。

【问题讨论】:

  • 介意粘贴您的 Game 类的整个代码,以便我们进一步帮助您吗?
  • 您在什么时候在代码中创建 spriteBatch? Xna有非常明确的初始化过程,所以你只能在初始化过程中的某些点之后使用某些对象。

标签: c# visual-studio-2008 windows-7 64-bit xna


【解决方案1】:

为了完整起见,我将答案放在这里。

代码

spriteBatch = new SpriteBatch(GraphicsDevice);

只能在 Game 类的 LoadContent() 方法中执行。我将它放在构造函数中,此时尚未定义 GraphicsDevice 对象according to one of the answers to this question

【讨论】:

  • 这解决了我在从 GameBackground 类的构造函数中访问 Game.GraphicsDevice.Viewport.Width 的问题/i> 构造函数(这显然发生在 LoadContent 之前。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多