Основная ошибка Sprite Atlas, созданная в папке XCAssets, не поддерживает пакетный рендеринг
Я начал использовать новый Атлас Sprite в папке XCAssets вместо моих атласов в папке проекта. Однако я заметил, что когда я делал это, мои узлы больше не обрабатывались пакетно, что приводило к большому количеству неэффективных вызовов отрисовки. Это полностью побеждает цель использования атласа!
Чтобы было ясно, это код, который я использовал для получения атласа.
let atlas = SKTextureAtlas(named: "Sprites")
"Спрайты" - это Атлас спрайтов, созданный в папке XCAssets.
У кого-нибудь есть обходной путь, или я застрял, делая атласы Sprite Kit в папке проекта.
Я использую Xcode 7.2 beta.
Причина, по которой я хочу использовать новые атласы Sprite Kit, заключается в этой проблеме.
2 ответа
Я нашел один обходной путь, когда набирал вопрос. Вы можете создать SKTextureAtlas программно из изображений в папке XCAssets следующим образом:
let atlas = SKTextureAtlas(dictionary: ["Head":UIImage(named: "Head")!, "Body":UIImage(named: "Body")!])
Это, очевидно, просто обходной путь. Надеюсь, Apple исправит это в более поздних версиях Sprite Kit. Это довольно серьезная ошибка производительности, о которой должны знать все разработчики. Даже в примере проекта Apple используются новые атласы Sprite, так что вы думаете, что они будут работать в пакетном режиме.
Обновление 1 Ответ от Apple:
Спасибо, что сообщили нам об этой проблеме. В настоящее время мы расследуем причину и будем исправлять ее в будущих обновлениях iOS. Между тем, вы можете применить два обходных пути: 1. Создать и использовать текстурный атлас в папке.atlas. 2. Продолжение использования текстурного атласа в каталоге ресурсов, но с целью развертывания, установленной на iOS 8.0.
Обновление 2, по словам Apple, возможно, было исправлено в iOS 10. Идем к расследованию.
Кажется, это исправлено в iOS 10. Единственное, что раздражает, это то, что у вас не может быть двух изображений с одинаковыми именами, даже если они находятся в разных атласах.
Редактировать: это исправлено только в iOS 10. Если вы работаете в iOS 9, происходит сильная утечка памяти, которая может привести к сбою приложения.