Загружает ли Sprite Kit атлас текстуры несколько раз, если я позже использую SKTextureAtlas?

Это заставляет меня думать.

Игра начинается, и я создаю спрайты с -spriteNodeWithImageNamed: метод. Позже для анимации я создаю объект SKTextureAtlas. Некоторые люди говорят, что это быстрее, потому что -spriteNodeWithImageNamed: сначала заглянет в комплект вашего приложения для png, а после этого заглянет в атлас.

Но что мне неясно: если я создам SKTextureAtlas позже, это узнает о уже загруженном образе атласа или он будет тупым и просто загрузит изображение снова?

И если я создаю объект SKTextureAtlas в нескольких узлах для одного и того же атласа. Будет ли он загружать атлас несколько раз? Должен ли я использовать только один экземпляр SKTextureAtlas для любого атласа?

1 ответ

Это правда, что spriteNodeWithImageNamed: сначала будет искать файл в комплекте. Если он не может найти файл пакета, он проверит, существует ли изображение с таким именем в атласе, доступном в комплекте.

Если Sprite Kit находит изображение с таким именем в любом атласе, он автоматически загружает этот атлас, чтобы использовать указанное изображение в качестве спрайта при использовании spriteNode/initWithImageNamed: Инициализаторы. Это позволяет начать разработку без атласов, а затем добавлять файлы в атлас.

Я рекомендую использовать атласы с самого начала, потому что могут быть небольшие различия, и вы сможете более реалистично оценить производительность вашего приложения.

Да, Sprite Kit достаточно умен, чтобы не перезагружать ресурс, который уже находится в памяти. Он также не создаст новый экземпляр того же атласа, а вернет вам указатель на уже существующий атлас с тем же именем.

Sprite Kit также использует механизм кэширования, поэтому, даже если последняя сильная ссылка на файл ресурсов была удалена, файл останется в памяти. Однако я не думаю, что кто-то сделал глубокий анализ того, как, когда и в каком порядке Sprite Kit в конечном итоге освобождает кэшированные экземпляры из памяти.

Короче говоря: положитесь на Sprite Kit, чтобы сделать то, что вам нужно.

Другие вопросы по тегам