4

这样的课程有必要吗?

public class ContentCache
{
    private readonly ContentManager _content;
    private readonly Dictionary<string, Texture2D> _textureCache = new Dictionary<string, Texture2D>();

    public ContentCache(ContentManager content)
    {
        _content = content;
    }

    public Texture2D Load(string assetName)
    {
        Texture2D texture = null;
        if (!_textureCache.TryGetValue(assetName, out texture))
        {
            _textureCache[assetName] =
                texture = _content.Load<Texture2D>(assetName);
        }
        return texture;
    }
}

我很好奇ContentManager.Load<Texture2D>()它是否在内部有自己的缓存。我不想双重缓存东西。

笔记:

我们的 XNA 游戏是 2D 的,可以在 WP7 和 Windows 以及 iOS 和 OSX 上使用MonoGame 运行

MonoGame在 Windows 中的功能可能与 XNA 不同,但我可能可以浏览它的源代码来找出答案。

4

3 回答 3

4

上课是不必要的。ContentManager 代表您执行此操作。

资源:

http://forums.create.msdn.com/forums/p/31383/178975.aspx

笔记:

就 Mono 而言……我确信这些实现可以很好地相互反映,但在这种情况下我不能确定。

此外,如果您想重新加载资产,您可以使用额外的 ContentManager 并在之后将其丢弃。

于 2011-10-20T22:07:33.800 回答
1

需要注意的是,Mono 类 ContentManager 现在也进行缓存。

在 2012 年的某个时候添加。供将来参考。

于 2014-07-08T02:21:52.627 回答
0

通过使用一些预缓存字符串数组,只需在第一个 LoadContent 方法中缓存需要缓存的内容,例如:

// Preload assets
static readonly string[] preloadAssets =
{
     "Textures\\texture1",
};

protected override void LoadContent()
{
    foreach ( string asset in preloadAssets )
    {
        Content.Load<object>(asset);
    }
}

可能是这样的!

于 2011-10-20T22:52:33.907 回答