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で実行され、 MonoGameを使用してiOSとOSXでも実行されます。

MonoGameはWindowsのXNAとは機能が異なる場合がありますが、おそらくそのソースを参照してそれを見つけることができます。

4

3 に答える 3

4

クラスは不要です。ContentManagerはあなたに代わってこれを行います。

ソース:

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

ノート:

モノに関しては...実装はお互いを非常によく反映していると確信していますが、この機会に確信は持てません。

また、アセットを再ロードしたい場合は、追加の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 に答える