我正在创建一个游戏,目前我有3个类,greenpaddle、ball和Game1。
当我运行我的游戏时,调试器跳到我的spriteBatch.Begin();上,并说NullReferenceException未处理的。这是我的Game1.cs:
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Ball ball;
GreenPaddle gPaddle;
Texture2D BackGround;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.PreferredBackBufferHeight = 500;
}
protected override void Initialize()
{
gPaddle = new GreenPaddle();
ball = new Ball(gPaddle);
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
BackGround = Content.Load<Texture2D>("pongBG");
gPaddle.LoadContent(Content);
ball.LoadContent(Content);
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
gPaddle.Update(gameTime);//Error Line
ball.Update(gameTime);
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();//Error Line
spriteBatch.Draw(BackGround, new Vector2(0f, 0f), Color.White);
gPaddle.Draw(spriteBatch);
ball.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
}不知道怎么回事,我从来没出过这种事。
发布于 2013-07-28 01:41:04
因为你初始化了sprite批..。
spriteBatch = new SpriteBatch(GraphicsDevice);
...It不应该是null,除非您的其他类正在更改它。
您可以尝试的东西:
-Put是加载内容中的一个断点,我不知道为什么不调用它,但是请检查一下,确保LoadContent()被调用了。
-Rebuild您的项目,并确保您的更改被保存。
...As --我写了这个答案,并在我的机器上测试了代码--我终于发现了错误。如果其他人有这样的问题,我会留下上面的建议。
您不能在您的base.Initialize方法中调用Initialize()。此方法调用内部XNA内容,这将导致调用LoadContent()。
在base.LoadContent方法中调用LoadContent()也是一个好主意,您应该始终在任何重写的方法上调用基方法。
https://stackoverflow.com/questions/17902878
复制相似问题