2012-02-03 3 views
0

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

Я смотрел CCSpriteBatchNode и NSMutableArray, но я не уверен, что использовать.

Я рассмотрел пример Штеффена Иттергейма из его книги относительно создания пуль при инициализации, а затем использовал их, когда это необходимо. Я думал, что это будет неэффективно и налогообложение на iPhone. Кроме того, не все пуль постоянно обновляются, даже если они не видны, используя еще больше ограниченную память и процессор?

С другой стороны, если бы у меня был NSMutableArray и добавлены элементы по мере необходимости, а обновлено несколько выборочных, которые в настоящее время существуют, будет ли это более эффективным.

Таким образом, моей основной проблемой является выбор между NSMutableArray или CCSpriteBatchNode и выяснение, которое является наиболее эффективным при создании многочисленных, постоянно обновляемых объектов.

Спасибо!

+0

Я не читал книгу, но вряд ли автор мог бы использовать «неэффективный» пример. Мой лучший совет - «заставить его работать», а затем определить, есть ли у вас проблема с производительностью. Если вы это сделаете, вернитесь сюда со спецификой вашей реализации с целенаправленным вопросом. Трудно дать вам практические советы без каких-либо подробностей: сколько спрайтов, какие действия они выполняют при прокрутке и т. Д.). – YvesLeBorg

ответ

0

Если вы используете Cocos, CCSpriteBatchNode намного лучше, если вы планируете одновременно иметь много объектов на экране. CCSpriteBatchNode только «рисует» объект один раз, а затем повторяет его повторно в вашем представлении. Это экономит много ценных ресурсов ЦП. Вот почему CCSpriteBatchNode используется с пулями, потому что на экране их много.

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

Я рекомендую придерживаться объектов Cocos, когда вы можете, так как они предназначены для улучшения производительности по таким причинам, над родными объектами Apple, такими как NSMutableArray.

Однако, если вы настаиваете на использовании NSMutableArray, по-прежнему считайте CCArray, если вы используете Cocos. Но CCSpriteBatchNode, вероятно, будет вашим лучшим выбором.

0

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

Кэшировать многие объекты на самом деле быстрее, чем создавать и выпускать их во время выполнения, даже если это означает, что у вас всегда будет 400 или около того из них в памяти. Для этого требуется, возможно, 200 КБ памяти, и избегает частых циклов alloc/dealloc, которые вы захотите избежать, насколько это возможно, особенно на устройствах 1-го/2-го поколения.