2015-05-06 3 views
1

У меня возникла проблема с задержкой игры в начале моего проекта. Итак, как только вы нажмете, чтобы начать игру, он начинает работать примерно на 42-48 FPS, когда вы идете по игре, он начинает оседать и заканчивается примерно на 58-59 FPS, что хорошо. Поэтому я пытался это исправить, я уже пробовал предварительно загружать свои текстурные атласы, но он все еще не работает. Так что я побежал профайлер, и кажется, что это моя проблема:Как я могу улучшить FPS?

Кажется, его мой метод Update. Я считаю, что проблема в том, что она должна быть с моим файлом Plist. Я загружаю все свои объекты из одного очень длинного файла. Я попытался запустить проект на гораздо более короткий файл, и он отлично работает на 60 FPS. Есть ли способ, которым я могу это решить?

+0

Возможно, вы могли бы разделить plist на разделы, а затем только разобрать первый раздел, когда игра начнется. Другие секции затем могут быть проанализированы async в фоновом режиме. – donnywals

+0

спасибо человеку, есть ли у вас какие-либо идеи о том, как я могу это сделать? Или некоторые ресурсы, где я могу прочитать об этом и сделать что-то подобное – Thesaurus03

ответ

0

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

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

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

2

Есть несколько вещей, которые вызывают первоначальное падение FPS. Перед началом игры начинается:

  1. Предварительная загрузка текстур и текстурных атласов.
  2. Предварительно загрузите любые звуки, которые вы используете.
  3. Preload любые дополнительные ресурсы (Plist, создание карт, и т.д ...)

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

+0

Спасибо @sangony, вы знаете, как я могу предварительно загрузить текстуры? Или когда я могу найти информацию для этого? – Thesaurus03

+0

@ Thesaurus03 - https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKTextureAtlas/index.html#//apple_ref/doc/uid/TP40013028-CH1-SW2 – sangony

0

Так я использую время профайлер чтобы увидеть, что это то, что делает мой FPS падать вниз в самом начале, и я считаю, согласно это этот кусок кода в моей Update метод:

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

Попробуйте добавить счетчик и запустить код, который вы опубликовали реже, и посмотреть, как это влияет на ваш FPS. Например, вы можете запускать код каждые 0,1 секунды, а не каждые 1/60 секунды.

В общем, вы должны стараться избегать запуска кода с частотой кадров, если вы не хотите необходимо. Например, ваша игра может работать со скоростью 60 кадров в секунду, но вы можете иметь некоторую логику игры, которая будет работать каждые 0,1, пока игровой процесс не будет затронут. Это важная оптимизация, которую нужно искать при разработке игры.


Читайте больше в своем описании, похоже, что ваша проблема также может быть связана с неправильной предварительной загрузкой ваших активов. Перед началом игры убедитесь, что вы сохраняете единственную ссылку на свои SKTextures, Fonts, Sounds, Actions и загружаете их в память.

+0

Эй, @EpicByte и как я могу добавить счетчик? Чтобы запустить код, как вы говорите. А что касается SKTextures, я уже предварительно загружал их перед началом игры, но все же это не сработало! – Thesaurus03

+0

@ Thesaurus03 Вы можете сделать целое число и увеличивать его каждый раз, когда вызывается обновление. Затем, когда счетчик больше, то определенное значение запускает код и сбрасывает счетчик. Вы также можете рассчитать время дельта каждого кадра и использовать его вместо этого. Что касается предварительной загрузки, у меня есть ощущение, что вы предварительно загружаете, но не сохраняете отдельные ссылки на свои текстуры. Значение, если вы инициализируете SKTextures, такие как SKTexture (...) в любой точке вашей игры, было бы плохо. Инициализируйте все текстуры в начале и повторите использование всех ваших переменных. –

+0

@ Thesaurus03 Кроме того, если у вас много текстур, вы можете хранить их все в словаре или массиве. И любые текстуры, которые вы используете для анимации, должны быть в отдельном массиве. –

Смежные вопросы