2010-05-09 65 views
0

我刚开始尝试用XNA 3.1做一个简单的游戏来帮助自己学习C#和XNA。然而,我遇到了一个有趣的问题。在所有的教程,都应该实例化一个新的spriteBatch对象这样的时候该传球的GraphicsDevice:GraphicsDevice在我的XNA Windows游戏项目中为null

spriteBatch = new SpriteBatch(GraphicsDevice); 

一个甚至可能做到这一点:

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

,其中显卡是GraphicsDeviceManager。然而,无论我尝试使用哪个版本,当我尝试将GraphicsDevice对象传递给spriteBatch的构造函数时,总会得到一个ArgumentNullException。我发现几乎每个教程都提供了第一个,只有一个提到了第二个选项。是否有其他人遇到类似的错误或知道可能导致这种情况?我在Windows 7 64位与Visual Studio 2008年的工作

编辑:

我似乎已经发现了这个问题。我试图在构造函数中执行该代码(这是我认为它应该去的地方)。我做了一些谷歌搜索,并找到了答案here。谢谢您的帮助。

+0

记住粘贴您Game类的整个代码,以便我们可以进一步帮助您? – mauris 2010-05-09 03:33:05

+2

在什么时候在代码中创建spriteBatch? Xna具有非常明确的初始化过程,因此您只能在初始化过程中的某些点之后使用某些对象。 – 2010-05-09 03:33:48

回答

2

为了完整起见,我在这里给出答案。

代码

spriteBatch = new SpriteBatch(GraphicsDevice); 

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

+0

这解决了我访问* Game.GraphicsDevice.Viewport.Width *的问题,它是* *构造函数中的一个* Background *类的构造函数(这明显发生在* LoadContent *之前),谢谢! – Kit 2010-11-28 01:29:09