簡體   English   中英

XNA Texture2D緩存

[英]XNA Texture2D caching

這樣的課是必要的嗎?

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不同,但我可能會瀏覽它的來源以找到它。

這堂課是不必要的。 ContentManager代表您執行此操作。

資源:

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

注意:

就Mono來說......我確信這些實現相互之間相當完美,但我不能確定這一點。

此外,如果您想要重新加載資產,您可以使用其他ContentManager並在之后將其丟棄。

應該注意的是,Mono類ContentManager現在也可以進行緩存。

在2012年的某個時候添加。供將來參考。

只需使用一些預先緩存的字符串數組緩存第一個LoadContent方法中需要緩存的內容,例如:

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

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

這樣的事可能!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM