2015-02-11 2 views
0

В настоящее время я разрабатываю игру Sprite Kit, которая прокручивается между двумя главными экранами A & B. Позиция A (0, 0) и позиция B (0, device_height).кол-во просмотров увеличивается аномально

Большую часть времени, игра работает 60fps и сделать подсчет (получил с SKView::showsDrawCount собственности) на 8 или 10. Но иногда, только на экране B, количество розыгрышей увеличение ненормально 70-80 ничьи!

Вот некоторые факты:

  • Я не удалить экран узлов, когда я показываю B, так как узлы продолжают влиять на физику.
  • Я использую SKTextureAtlas, и я предварительно загрузил всю текстуру в словаре для целей оптимизации.
  • Даже при удалении декоративного узла (части, фоны) увеличивается количество счетчиков.
  • Когда ошибка возникает, количество невыбранных узлов увеличивается значительно (задано SKView::showsNodeCount), но мой реальный счет узла (найденный с использованием рекурсивно [node::children count]) является стабильным.

Был ли кто-то столкнулся с проблемой и какие оптимизации можно было сделать?

Как я могу получить дополнительную информацию об этих розыгрышах, чтобы узнать, откуда они взялись?

Благодаря

EDIT:

Просто найти что-то очень интересное. Вот использование процессора с течением времени, переключение между экранами A и B. Мы видим, что есть определенный Thread-14, который делает много вещей!

processor over time

+1

ну, вы должны спросить себя ..Какая разница от экрана B по сравнению с экраном? У меня были серьезные проблемы с оптимизацией в моей игре (у меня все еще есть несколько второстепенных). Единственный способ, которым я могу понять, что вызывает проблемы, - включить или выключить вещи и наблюдать за работой. – hamobi

+0

Спасибо, это именно то, что я делаю: обертывание и отключение ... Странная вещь - нет никакой разницы между A & B. [A B] - это всего лишь один SKScene, чья высота вдвое больше, чем у устройства. Я подозреваю, что есть ошибка с системой spritekit cullig, но слишком легко сказать, что это происходит из sdk. – Martin

+0

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

ответ

0

Ok Я нашел его!

Я использую некоторые SKEffectNode s как корни деревьев узлов, которые никогда не меняются, с свойством shouldRasterize = YES (для цели кэширования я видел этот совет в Интернете, но я не могу вспомнить где. Но теперь мне интересно, это действительно присваивается ... как вы думаете?).

Я заметил, что shouldEnableEffects свойство этих узлов были все установлены в YES после запуска, несмотря на описание в яблочной документации:

Если значение этого свойства YES, узел эффекта применяется фильтра и смешивает результаты. Если значение NO, узел эффекта игнорируется, а его дети отображаются нормально. Значение по умолчанию: NO.

Очевидно, что документ Apple не соответствует значению по умолчанию, по крайней мере, на iOS8.

Я предполагаю, что сумасшедшая нить обрабатывала некоторые эффекты смешивания, потому что после установки каждого SKEffectNode::shouldEnableEffects NO, нить не возвращалась. Тем не менее, я до сих пор не понимаю, почему ошибка произошла только на экране B.

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