我正在和朋友一起尝试 XNA 4.0,我们正在实现一个游戏,暗示切换屏幕,常见的东西,如 MainMenu、GamingScreen、MultiplayerScreen 等。
我遇到的问题是,仅在我的 Windows7 塔上,而不是在我朋友的任何计算机上,从 MainMenu 切换屏幕时出现紫屏死机。我将以去 GamingScreen 为例。
我们的 Game1 有一个 currentScreen (ENUM WhichScreen) 属性。它从 MainMenu 开始,在每次 Draw 和每次 Update 时,我们打开 currentScreen 以选择在哪个屏幕上调用 Draw 和 Update。因此Game1.Update
,Game1.Draw
它可能按如下顺序排列:
MainMenuScreen.Draw
MainMenuScreen.Update
GamingScreen.Draw
GamingScreen.Update
GamingScreen.Draw
在 MainMenuScreen s update, its components (homemade class) are updated, and it happens that
Game1.currentScreen` 从 MainMenu 更改为 Gaming。
但是由于某种原因,Draw()
最准确地说是在EndDraw()
(据我所知, GraphicsDevice.Present
),屏幕变成紫色。
我尝试了很多方法来调试和解析这些论坛,但无济于事。暂停抽奖(例如等待 GamingScreen 更新)是不够的,因为屏幕会再次变为紫色。
重要提示:我已将其设置为 MainMenuScreen Draws AND GamingScreen Updates before GameingScreen dars。发生的事情很奇怪:是MainMenu的Draw导致了紫屏!
所以我的观点是:从更新中的点击部分到EndDraw()
某个时间点,在 GamingScreen 甚至进入任何操作之前,后台缓冲区会无缘无故地自行拧紧。
当屏幕变成紫色时,我检查并检测到它this.UponDeactivate()
被调用。但是调用 athis.UponActivate()
并没有帮助我。
在出现紫色屏幕后: - 在 Game1 -> GamingScreen 上仍然成功调用更新,甚至翻过隐藏在紫色作品下的按钮(我听到按钮悬停的声音) - 也调用了 Draws,但没有成功,因为屏幕保持紫色。- 最小化窗口并重新打开它可以去除紫色并使其正常工作。这听起来很重要,这就是我打电话的原因this.UponActivate()
。
总结一下,我不知道是什么导致后台缓冲区因为空而发疯。它必须通过单击按钮进行更改,但奇怪的部分是如何仅单击就已经搞砸了屏幕。
很难为您提供重要部分的类之间调用的所有代码。在 changeGameState 之后,按钮完成了他的 execute(),然后它的面板完成了更新,然后大面板自己更新了另一个面板。然后,我们回到 Game1 的代码,它简单地以结束Update()
(base.Update()
我也尝试将base.Update()
Update 放在顶部,但无济于事),然后转到 BeginDraw。稍后,EndDraw()
清空屏幕。
调用 base.Update的顺序(Draw 的第一个或 Draw 的 laft、Update 的第一个或最后一个Update()
)是否重要?--> 是什么导致后台缓冲区像这样发疯?哦,上帝,可以在Draw()
之前和Update()
完成之前拨打电话吗?还是其他Update()
的?
非常感谢你的帮助!