NullReferenceException在MonoGame.Framework.DLL中引发

时间:2013-07-22 13:55:28

标签: c# xna windows-phone-8 nullreferenceexception monogame

我正在为MonoGame开发一款适用于Windows Phone 8的小游戏。最近,随着NullReference异常,我的游戏开始随机崩溃。 Visual Studio指出了spriteBatch.End()方法,但它发生在MonoGame库中的某个地方。

游戏以启动画面开始,然后是开始画面,会出现一个短篇故事然后开始游戏。例外只发生在游戏中,但它发生在随机时刻。有时它在游戏中有2秒,有时在2分钟内。有时它会在第一次触摸动作时发生,有时我根本不触碰,但仍然会发生异常。

我对屏幕的某个特定区域有一个触摸问题,我不得不从GamePage.xaml中删除StackFrame来解决它,尝试将其从另一个GamePage.xaml复制回来。另外我正在使用带有2个争论覆盖的spriteBatch.Begin()方法来摆脱预乘的alpha。我没有其他任何改变,我可以想到,但由于我的主管,我暂时不能发布任何代码。如果有必要,我可以说服他。


编辑:我的项目有不同的游戏画面,这个例外只发生在“关卡”,“积分”等工作正常。我评论了所有Update方法,即使我尝试绘制一个简单的背景,也会在Draw上发生异常。

Game1.cs

protected override void Draw(GameTime gameTime)
{
    spriteBatch.Begin();

    base.Draw(gameTime);
    ScreenManager.Instance.Draw(spriteBatch);

    spriteBatch.End();        
}  


ScreenManager.cs(Singleton class)

public void Draw(SpriteBatch spriteBatch)
{
    if (!this.Paused) currentScreen.Draw(spriteBatch);
    else PauseMenu.Draw(spriteBatch); 
}


Level.cs(currentScreen is a Level everytime this happens)

public override void Draw(SpriteBatch spriteBatch)
{
    base.Draw(spriteBatch);
    if (!completed)
    {
        //Commented bla bla that draws everything else
    }
}


GameScreen.cs(Base class of Level)

public virtual void Draw(SpriteBatch spriteBatch)
{
    spriteBatch.Draw(image, new Vector2(480, 0), null, this.Color,
        (float)(Math.PI / 2), new Vector2(0, 0), 1f, SpriteEffects.None, 0);
}

使用XmlManager类在XML文件中逐行读取级别数据,parseXml方法创建一个级别并根据Xml文件分配加载其属性,返回该级别。

ScreenManager.Instance.currentScreen =
    ScreenManager.Instance.manager.ParseXml(this.Content, "Level" +
        ++ScreenManager.Instance.CurrentLevelId + ".xml");

这就是Levels initalized。


EDIT2:这只在我尝试绘制纹理时才会发生,我可以很好地绘制字符串。

0 个答案:

没有答案