首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spriteBatch为空

spriteBatch为空
EN

Stack Overflow用户
提问于 2013-07-27 21:59:51
回答 1查看 1.1K关注 0票数 1

我正在创建一个游戏,目前我有3个类,greenpaddle、ball和Game1。

当我运行我的游戏时,调试器跳到我的spriteBatch.Begin();上,并说NullReferenceException未处理的。这是我的Game1.cs:

代码语言:javascript
复制
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);
    }
}

不知道怎么回事,我从来没出过这种事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()也是一个好主意,您应该始终在任何重写的方法上调用基方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17902878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档