2015-03-18 2 views
1

Я использую SpriteKit для написания стрельбы из пули-ада, а структура SK, похоже, может обрабатывать сотни узлов со скоростью 60 кадров в секунду без каких-либо проблем. Моя проблема, однако, в том, что иногда мне нужно создавать 50+ узлов в одном кадре, и это, похоже, вызывает нечетное сцепление в частоте кадров. Есть ли какие-либо трюки, которые я должен использовать, чтобы убедиться, что создание множества узлов максимально возможно?Spritekit: Эффективно создавайте много SpriteNodes

Я повторно использую SKTextures, должен ли я также иметь постоянную коллекцию SKSpriteNodes и SKActions, которые получают «переработку» вместо их создания?

+1

Объедините свои узлы и используйте их вместо того, чтобы постоянно добавлять их в качестве детей. –

+0

Вот что я не хотел делать ... есть ли штраф за производительность за то, что сотни узлов сидят без дела? Я предпочел бы иметь странный сбой, а затем увеличить потребление батареи! – GoatInTheMachine

ответ

1

Вы можете предварительно создать все узлы перед загрузкой игровой сцены (используя обработчик завершения), а при необходимости просто показать их, т. Е. SetHidden = NO. Таким образом, вам не нужно повторно создавать узлы снова и снова. Когда узлы не нужны, просто установите их скрытыми. Вы можете прочитать больше here. Просто найдите часть о лазерах. Я думаю, что это был бы один из способов разрешить падение частоты кадров, вызванное тем, что в то же время возникло множество узлов. И я надеюсь, что вы используете атласы ... Чтобы быть уверенным, что все работает правильно, ваши ничьи и узлы подсчитывают информацию в поле зрения контроллера и проверяют статистику. Если вы не используете атласы или используете их неправильно, может случиться так, что количество обратных счетчиков велико (по сравнению с количеством узлов).

О атласах из docs:

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

1

Через пару очков, чтобы иметь в виду:

  1. Удалить все узлы больше не нужны от родителей.
  2. Не используйте usePreciseCollisionDetection, если вам абсолютно не нужно.
  3. Используйте текстурный атлас.
  4. Не заходите за борт с количеством узлов. Оставайтесь реалистичными и используйте только необходимый минимум.
Смежные вопросы