首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNA Texture2D缓存

XNA Texture2D缓存
EN

Stack Overflow用户
提问于 2011-10-21 06:04:05
回答 3查看 2.1K关注 0票数 4

像这样的类是必要的吗?

代码语言:javascript
复制
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上运行,也可以在使用MonoGame的iOS和OSX上运行。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-21 06:07:34

这个类是不必要的。ContentManager代表您执行此操作。

来源:

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

注意:

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

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

票数 4
EN

Stack Overflow用户

发布于 2014-07-08 10:21:53

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

在2012年的某个时候添加。将来可以用来作参考。

票数 1
EN

Stack Overflow用户

发布于 2011-10-21 06:52:34

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

代码语言:javascript
复制
// Preload assets
static readonly string[] preloadAssets =
{
     "Textures\\texture1",
};

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

像这样的事情可能会发生!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7842842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档