【问题标题】:Graphics not cleared XNA (Monogame) after switching screen切换屏幕后未清除图形 XNA (Monogame)
【发布时间】: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方法中。但是我们取消了这个类,所以它不应该被绘制。
  • 检查更新和绘制函数是否未在前一屏幕中执行。我将枚举器用于屏幕状态,并且我只更新和绘制选择的屏幕。

标签: c# ios xna monogame


【解决方案1】:

您是否在调用绘图代码之前清除图形设备资源缓冲区?

GraphicsDevice.Clear(Color.CornflowerBlue);

如果您这样做并且问题仍然存在,那么您可能仍然将旧屏幕作为组件。

尝试在调用 Screen Remove 代码之前和之后设置一个断点,并使用调试器来验证您的组件列表是否仍然包含应该删除的屏幕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多