【发布时间】:2014-09-10 13:27:57
【问题描述】:
我们目前正在优化我们的第一个 XNA 游戏,我们遇到了一个问题:
有一个管理所有屏幕的 ScreenManager。每次我们“推送”一个新屏幕时,我们都会删除(null)旧屏幕,因此应该从内存中删除图形。但它似乎不起作用,旧图形仍留在背景中。我们正在使用此代码删除之前的屏幕:
private Screen RemoveScreen() {
Screen screen = (Screen)gameScreens.Peek();
OnScreenChange -= screen.ScreenChange;
Game.Components.Remove(screen);
screen.contentManager.Unload ();
return gameScreens.Pop();
}
我们进行了一些研究,发现了一种可能的解决方案,可以为每个屏幕提供自己的 ContentManager。当我们切换屏幕并取消旧屏幕时,我们会在取消之前运行 ContentManager.Unload() 。不幸的是它不起作用(旧图形仍在绘制,非常奇怪的闪烁图形)。为了澄清我制作这个小 youtube 视频的问题,你可以看到主屏幕,当我进入设置屏幕时,你可以看到旧的主屏幕,而它应该被删除:http://youtu.be/ii0qD6PusA8
我希望任何人都可以帮助我们。
【问题讨论】:
-
您是否在任何地方重绘屏幕?
-
没有,只是在类的draw方法中。但是我们取消了这个类,所以它不应该被绘制。
-
检查更新和绘制函数是否未在前一屏幕中执行。我将枚举器用于屏幕状态,并且我只更新和绘制选择的屏幕。