XNA SpriteBatch实例化问题

时间:2010-12-26 02:19:35

标签: xna

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

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

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

1 个答案:

答案 0 :(得分:1)

离开我的头顶(你可以使用Reflector仔细检查我),XNA初始化期间的调用顺序如下:

  • Initialize()在您的游戏课程中
  • 游戏中
  • LoadContent() 组件(来自Game.Initialize
  • 您的游戏课程中的
  • LoadContent()(来自Game.Initialize
  • 更新并绘制电话

(顺便说一句,这不是完整的清单。)

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

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

(您也应该并且可能需要调用baseLoadContent中的相应UnloadContent函数。)

就我个人而言,我更愿意避免使用DrawableGameComponent而只是制作自己的独立课程。这让我可以更直接地共享SpriteBatch的实例(而不是必须为每个组件创建一个),它让我可以更明确地控制调用事物的顺序。