0

我在抛出异常时遇到了一些问题。下面是来自 XNA 循环的 draw 方法。

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.White);

        checkInitialization();  // Makes sure that the graphics loader has been initialized
        spriteBatch.Begin();
        GameRunner.CurrentGame.GraphicsSystem.Draw(this.spriteBatch);
        spriteBatch.End();  // Exception is thrown here

        base.Draw(gameTime);
    }

这是来自图形系统的绘制方法。

public void Draw(SpriteBatch spriteBatch)
    {
        foreach (GraphicsComponent component in this.components)
        {
            component.Draw(spriteBatch, this.texture);
        }
    }

图形组件存储在 graphicsSystem 中的 List<> 中。我认为问题的一部分可能是我跨项目工作。上面的 Top 循环在一个 XNA 项目中。第二种绘制方法在我构建的一个游戏库中。最后,component.draw() 方法的实际实现是在第三个项目中,该项目特定于我正在开发的当前游戏。图形系统中的纹理字段是在构建图形系统时从 Content.Load 函数初始化的。

我尝试了几种不同的方法。我将 spritebatch.begin 和 spritebatch.end 移到图形系统中,仍然导致异常。当图形系统中的组件列表为空时,不会出现异常。

我不确定当范围从一个项目移动到另一个项目时加载的纹理是否超出范围,但我认为不应该是这种情况。我在一个可行的项目中也有相同的设置,但是我正在重构为多个以在其他地方使用一些代码。我不会在正在消失的纹理的任何地方调用 dispose,所以我什至不确定是否要开始狩猎。

如果不清楚,请告诉我,我会尝试详细说明。

4

1 回答 1

0

我需要知道您如何管理内容...

我想如果你不手动处理纹理,你是在某个地方处理内容管理器。

当您使用 game.Content.Load(asset) 加载资产时,内容管理器会保留已加载资源的列表,并且内容管理器负责在调用 game.Cntent.Dispose() 时释放它们。

于 2011-08-29T23:15:39.060 回答