Основные проблемы с производительностью iOS9 в Sprite Kit

Я испытываю ОГРОМНЫЕ проблемы с производительностью iOS9, и я просто не могу понять, что делать. Я прочитал много постов -Вот, а такжеВот например, но предлагаемые ими решения не помогают или мало что меняют.

Моя игра выросла с 60fps на старом iPad 2 (iOS 8.4) до <15fps на новом iPad mini (iOS 9).

Я пытаюсь разобраться с главным виновником. Я почти уверен, что один из них - SKCropNodes. Я обычно отрисовываю несколько узлов SKCropNode в моей сцене (6 - 18). Это никогда не было проблемой в iOS8, но, похоже, iOS9 лучше справляется с обрезкой, но также снижает производительность.

Если я отображаю узлы обрезки как обычные узлы SKSpriteNode, я получаю 5 кадров в секунду на старых устройствах и до 30 на новом iPhone 6. У меня нет альтернативы использованию узлов обрезки, но это не может быть проблемой.

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

Я использую Texture Packer для создания своих атласов с вариантами масштабирования для разных устройств. Я заметил, что XCAssets теперь имеет возможность добавить Атлас Sprite (кажется, я не могу найти никакой документации по этому поводу). Это не подходит для моей игры, так как я использую сотни спрайтов. Я попытался добавить свои атласы в XCAssets, но тогда по какой-то причине он не использует варианты масштабирования. Тем не менее, с текстурами низкого разрешения, он все еще работает ужасно.

Я пробовал настройку

skView.ignoresSiblingOrder = YES;

и учитывая все мои узлы значения zPosition, но все равно никакого эффекта. Я также добавил расширение .png к каждому имени изображения (изначально это означало, что они не будут отображаться).

У меня есть некоторые SKEffectNodes в моих сценах, но удаление и добавление их, похоже, не дает эффекта.

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

Я работаю над этой игрой уже 2 года и только что выпустил ее до iOS9. Сейчас он страдает от ужасной производительности и регулярных сбоев.

Кто-нибудь выяснил, что именно Apple сделала, чтобы убить производительность? Если бы я знал это, я бы хотя бы попытался обойти это ... Спасибо.

ОБНОВИТЬ

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

iOS 8, iPad 2, ~ 200 узлов, ~ 100 дро, 58,7 - 60 к / с

iOS 9, iPhone6, ~ 280 узлов, ~ 216 отрисовок, около 20 кадров в секунду

Я предполагаю, что разница в количестве узлов связана с разным размером экрана. Если я изменю сцену на iPhone 6, чтобы получить эквивалентные значения, FPS будет все еще около 24.

ОБНОВЛЕНИЕ 2

Используя шаблон Sprite Kit Xcode и изменив космический корабль на SKCropNode, содержащий космический корабль, в iOS 8 я могу добавить 100 кораблей без проблем с частотой кадров. На iOS 9, тот же проект, я могу добавить около 25, прежде чем частота кадров упадет до <30.

iOS 8 на iPad2:

iOS 9 iPhone 5:

С точки зрения использования текстурного атласа, как и в моем комментарии, я не могу гарантировать, что что-нибудь будет нарисовано из того же атласа. Моя игра содержит персонализированных персонажей с активами из ряда атласов (каждый из которых содержит ~ 100 текстур). На экране одновременно может отображаться до 9 символов. Я понимаю, что это не самый эффективный с точки зрения дро, но у меня никогда не было проблем до iOS9 ...

Обновление 3

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

Ответы на вопрос(0)

Ваш ответ на вопрос