XNA Texture2D кеширование - PullRequest
       25

XNA Texture2D кеширование

4 голосов
/ 21 октября 2011

Нужен ли такой класс?

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 может работать не так, как XNA в Windows, но я, вероятно, могу найти его источник, чтобы выяснить это.

Ответы [ 3 ]

4 голосов
/ 21 октября 2011

Класс не нужен.ContentManager делает это от вашего имени.

Источник:

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

Примечание:

Что касается Mono ... Я уверенреализации достаточно хорошо отражают друг друга, но я не уверен в этом.

Кроме того, если вы ХОТИТЕ перезагружать ресурс, вы можете использовать дополнительный ContentManager и выбросить его позже.

1 голос
/ 08 июля 2014

Следует отметить, что класс Mono ContentManager теперь также выполняет кеширование.

Добавлено в 2012 году. Для дальнейшего использования.

0 голосов
/ 21 октября 2011

Просто кэшируйте то, что должно быть кэшировано в первом методе LoadContent, используя некоторый массив строк предварительного кэширования, например:

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

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

Что-то в этом роде, возможно!

...