Использование атласа спрайтов, атласа текстур или каталога активов в проектах SpriteKit

Рекомендуемый Apple способ организации ресурсов в проекте SpriteKit сильно изменился за время существования движка. В старой методологии также были ошибки, которые препятствовали внедрению этих методов и требовали обходных путей. Старые вопросы и ответы по SO полны информации, которая устарела или запутана информацией о работе с ошибками, которых больше не существует. На SO должен быть пост, в котором рассказывается, как реализовать текущее решение этого вопроса, не отвлекаясь на обсуждение устаревших рабочих процессов или исправленных ошибок. Итак, вопрос в следующем:

Как упорядочить ресурсы изображений в проекте SpriteKit? В некоторых документах Apple рекомендуется использовать атласы текстур для повышения производительности. Но SKTextureAtlasсправочник по классам описывает варианты создания как атласов текстур, так и атласов спрайтов. Какой из них я должен использовать и как мне его реализовать?


person peacetype    schedule 16.04.2018    source источник


Ответы (1)


Создайте атлас спрайтов внутри каталога ресурсов. Вы получаете преимущества в производительности от наличия атласа текстур (старый способ заключался в создании атласа текстур вручную), а также простоту организации ресурсов изображений в каталоге ресурсов.

В этом видео WWDC с отметкой времени 18:06 выступающий говорит:

Организуйте свои графические активы обычным способом в каталогах активов: сгруппируйте их, назовите их в атласе спрайтов. И что это делает, так это автоматически создает атласы текстур во время сборки, которые вы можете получить через класс SKTextureAtlas.

Это подтверждается (хотя и менее четко, чем в видео) в справочнике по классам, где он говорит:

Предпочтительный механизм создания атласа текстур — в каталоге активов... Атлас спрайтов предлагает преимущества атласа текстур с функциональностью управления каталога активов.

Как в видео, так и в справочном документе по классу также упоминается, что эта практика позволяет вам использовать преимущества приложения истончение (подробно обсуждается в видео).

По умолчанию новые игровые проекты Xcode создаются с каталогом активов. Или вы можете добавить новый каталог активов в свой проект, выбрав Файл > Создать > Файл..., а затем выбрав Каталог активов в разделе Ресурс. > на появившемся экране.

Чтобы добавить атлас спрайтов, сначала выберите каталог активов в навигаторе проекта. Затем либо щелкните правой кнопкой мыши, либо выберите кнопку «плюс» (+) в представлении структуры области редактора. В появившемся раскрывающемся списке выберите Новый атлас спрайтов.

Создать новый атлас спрайтов

Ресурсы изображений, которые вы упорядочиваете в атласах спрайтов, будут автоматически преобразованы в атлас текстур во время сборки. Вы можете загрузить изображения из атласа текстур с помощью кода:

let atlas = SKTextureAtlas(named: "Monster")
let frame1 = atlas.textureNamed("monster-walk1.png")
person peacetype    schedule 16.04.2018
comment
Одна проблема с каталогом активов + атласами, с которой я столкнулся, заключается в том, что функция определения пространства имен не работает. Таким образом, вы должны иметь уникальные имена для всех ваших изображений не только внутри ваших альтов, но и глобально. Хотя это может быть проблемой или нет, в зависимости от вашей схемы именования ресурсов. Я говорю конкретно о Xcode 9.4.1 - person Igor Vasilev; 26.07.2018
comment
@Igor Vasilev: Я предполагаю, что сбой пространства имен происходит из-за того, что все изображения доступны по всему миру в медиатеке. Это значительно упрощает настройку анимации в сценах действий (Actions.sks): настройте действие AnimateWithTextures, перетащите изображения из библиотеки мультимедиа в поле «Текстуры» инспектора атрибутов, и все готово без необходимости доступа к атлас текстур по имени и превратить его содержимое в массив SKTextures. - person green_knight; 08.10.2019