我正在为MonoGame开发一款适用于Windows Phone 8的小游戏。最近,随着NullReference异常,我的游戏开始随机崩溃。 Visual Studio指出了spriteBatch.End()方法,但它发生在MonoGame库中的某个地方。
游戏以启动画面开始,然后是开始画面,会出现一个短篇故事然后开始游戏。例外只发生在游戏中,但它发生在随机时刻。有时它在游戏中有2秒,有时在2分钟内。有时它会在第一次触摸动作时发生,有时我根本不触碰,但仍然会发生异常。
我对屏幕的某个特定区域有一个触摸问题,我不得不从GamePage.xaml中删除StackFrame来解决它,尝试将其从另一个GamePage.xaml复制回来。另外我正在使用带有2个争论覆盖的spriteBatch.Begin()方法来摆脱预乘的alpha。我没有其他任何改变,我可以想到,但由于我的主管,我暂时不能发布任何代码。如果有必要,我可以说服他。
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:这只在我尝试绘制纹理时才会发生,我可以很好地绘制字符串。