Загружает ли Sprite Kit атлас текстуры несколько раз, если я позже использую SKTextureAtlas?
Это заставляет меня думать.
Игра начинается, и я создаю спрайты с -spriteNodeWithImageNamed:
метод. Позже для анимации я создаю объект SKTextureAtlas. Некоторые люди говорят, что это быстрее, потому что -spriteNodeWithImageNamed:
сначала заглянет в комплект вашего приложения для png, а после этого заглянет в атлас.
Но что мне неясно: если я создам SKTextureAtlas позже, это узнает о уже загруженном образе атласа или он будет тупым и просто загрузит изображение снова?
И если я создаю объект SKTextureAtlas в нескольких узлах для одного и того же атласа. Будет ли он загружать атлас несколько раз? Должен ли я использовать только один экземпляр SKTextureAtlas для любого атласа?
1 ответ
Это правда, что spriteNodeWithImageNamed:
сначала будет искать файл в комплекте. Если он не может найти файл пакета, он проверит, существует ли изображение с таким именем в атласе, доступном в комплекте.
Если Sprite Kit находит изображение с таким именем в любом атласе, он автоматически загружает этот атлас, чтобы использовать указанное изображение в качестве спрайта при использовании spriteNode/initWithImageNamed:
Инициализаторы. Это позволяет начать разработку без атласов, а затем добавлять файлы в атлас.
Я рекомендую использовать атласы с самого начала, потому что могут быть небольшие различия, и вы сможете более реалистично оценить производительность вашего приложения.
Да, Sprite Kit достаточно умен, чтобы не перезагружать ресурс, который уже находится в памяти. Он также не создаст новый экземпляр того же атласа, а вернет вам указатель на уже существующий атлас с тем же именем.
Sprite Kit также использует механизм кэширования, поэтому, даже если последняя сильная ссылка на файл ресурсов была удалена, файл останется в памяти. Однако я не думаю, что кто-то сделал глубокий анализ того, как, когда и в каком порядке Sprite Kit в конечном итоге освобождает кэшированные экземпляры из памяти.
Короче говоря: положитесь на Sprite Kit, чтобы сделать то, что вам нужно.