Задержка загрузки текстуры SpriteKit в первый раз даже с предварительной загрузкой

Вот моя проблема: Несмотря на это:

1) Предварительная загрузка всех моих текстурных атласов

2) Хранение моих атласов в синглтонах, чтобы ARC не утилизировал их.

3) Хранение всех моих массивов анимации в Singleton

SpriteKit ВСЕ ЕЩЕ имеет короткое «дрожание задержки» при добавлении врагов в мою сцену ТОЛЬКО при первом их добавлении. После того, как текстура отрисовывается один раз, она никогда больше не задерживается при добавлении этой текстуры в сцену. Объем памяти увеличивается, когда текстуры наконец отрисовываются на экране, что выглядит так, как будто они не были предварительно загружены.

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

        SKTextureAtlas.preloadTextureAtlases(primaryAtlas, withCompletionHandler: { () -> Void in

        })

primaryAtlas — это массив всех 4 моих атласов, которые хранятся в синглтоне.

Позвольте мне указать на некоторые вещи, которые я уже пробовал, и каковы мои текущие настройки.

1) Массив кадров для моих анимаций хранится в синглтонах и получает свои изображения из атласов, которые находятся в другом синглтоне. Раньше они были в одном Синглтоне.

2) Я пробовал хранить ВСЕ мои текстуры в синглтоне, который был загружен из атласов. Но в настоящее время мои анимации хранятся, а мои отдельные текстуры — это функции, которые извлекают эту текстуру из атласов.

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

Я пытался исправить это в течение очень долгого времени, и, честно говоря, похоже, что решения нет.

Кажется, здесь есть похожий вопрос StackOverflow, на который я не нашел ответа: медленный (предварительно загружен)

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


person datWooWoo    schedule 08.12.2015    source источник
comment
просто попробуйте предварительно загрузить текстуру и врага в другой поток, не используйте один и тот же поток, когда ваша текстура загружена полностью, добавьте новый поток и врага, используя этот поток, или вы можете поделиться своим кодом.   -  person dragoneye    schedule 08.12.2015
comment
Пробовал. Не работает. Я этого не понимаю. Я запустил его в фоновом потоке, но он все еще дрожит при первом рисовании.   -  person datWooWoo    schedule 09.12.2015
comment
@lespommes Удалось ли вам найти решение этой проблемы? У меня то же самое (iOS 9+).   -  person damirstuhec    schedule 13.09.2016
comment
К сожалению, я не был человеком. Буквально ни один человек не смог мне помочь или предложить стандартный шаблон класса для управления текстурами, который работает. Я потратил уйму времени и в конце концов просто выпустил его с дрожью, так как у меня не было идей. Мой совет? Изучайте единство. SpriteKit действительно не стоит проблем. Я не буду использовать его снова.   -  person datWooWoo    schedule 08.10.2016


Ответы (1)


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

person Yaroslav L'vov    schedule 09.03.2017