XNA SpriteBatch实例化问题

XNA SpriteBatch实例化问题,xna,Xna,我一直在XNA中练习某些技术,最近遇到了一个让我困惑的问题。我已经在我的一些Windows游戏项目中使用了这种技术,现在突然出现了一个问题,我想我忽略了一些东西 因此,我创建了一个新的Windows游戏项目,并向该项目添加了一个XNA游戏组件,将该组件添加到Game1.cs文件中。在Component中创建并实例化了一个SpriteBatch变量,然后尝试绘制一个简单的纹理来测试SpriteBatch 下面是我得到的运行时错误的图片: …以及两个文件的完整来源:pastebin.com/rFRk

我一直在XNA中练习某些技术,最近遇到了一个让我困惑的问题。我已经在我的一些Windows游戏项目中使用了这种技术,现在突然出现了一个问题,我想我忽略了一些东西

因此,我创建了一个新的Windows游戏项目,并向该项目添加了一个XNA游戏组件,将该组件添加到Game1.cs文件中。在Component中创建并实例化了一个SpriteBatch变量,然后尝试绘制一个简单的纹理来测试SpriteBatch

下面是我得到的运行时错误的图片: …以及两个文件的完整来源:pastebin.com/rFRkGKXJ

在我的头顶(你可以使用Reflector对我进行双重检查),在XNA初始化期间调用的顺序如下:

  • Initialize()
    在游戏类中
  • 游戏组件中的
    LoadContent()
    (从
    game.Initialize调用
  • 游戏类中的
    LoadContent()
    (从
    game.Initialize调用
  • 更新和绘制调用
(顺便说一句,这不是完整的列表。)

所以我猜,通过在游戏的
LoadContent
函数中添加游戏组件,游戏组件中的
LoadContent
不会被调用,因此其
SpriteBatch
不会被创建。您可以通过在游戏组件的
LoadContent
函数中添加断点来检查这一点

通常,您希望在游戏的
Initialize
功能中创建并添加游戏组件

(您还应该,并且可能需要调用
LoadContent
UnloadContent
中相应的
base
函数)


就我个人而言,我宁愿避免使用
DrawableGameComponent
,而只创建自己的独立类。这使我能够更直接地共享
SpriteBatch
的实例(而不是为每个组件创建实例),并使我能够更明确地控制调用的顺序。

我经常遇到这个问题,直到我弄清楚调用所有函数的顺序。如果问题仍然存在,请调用、初始化()然后将构造函数中的LoadContent()作为修补程序加载,它应该得到修复!