2013-07-14 5 views
1

Мой вопрос для приложений, написанных на cocos2d v1.1.0-beta2b для КСН:CCParticleSystem удаление передовой практики

Что являются лучшие практики для удаления/рилизингCCParticleSystem?

Один способ, который я знаю, используется setAutoRemoveOnFinish: ДА.

[emitter setAutoRemoveOnFinish:YES]; 
[emitter stopSystem]; 

Другой способ - удалить излучатель вручную, используя removeChild.

Есть ли другие? Какой способ рекомендуется?

В качестве примечания, существуют ли какие-либо известные проблемы, связанные с удалением/выпуском CCParticleSystem под cocos2d v1.1.0-beta2b?

ответ

0

Чтобы удалить систему частиц, просто удалите ее из своего родительского узла. Это лучший способ.

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

Если ваша система частиц имеет бесконечную продолжительность, используйте removeChild с cleanUp:YES (вам не нужно устанавливать stopSystem before). Таким образом, система удаляется принудительно.

Или вы можете использовать stopSystem с setAutoRemoveOnFinish:YES, и система будет удалена после окончания последней частички. Таким образом, система удаляется плавно.

Другие советы:

  • Используйте CCParticleSystemQuad вместо CCParticleSystem.
  • Рекомендуется создать вашу систему частиц с помощью конструктора autorelease, например [CCParticleSystemQuad particleWithFile:] или [CCParticleSystemQuad particleWithTotalParticles:].
  • И, конечно, используйте release, если у вас есть свойство, сохраняющее его.
+0

Вы уверены, что это правильно? «stopSystem не удалит систему частиц, она остановит ее, но система останется в качестве дочерней. ВАЖНО: если вы остановите систему, она не будет удалена setAutoRemoveOnFinish, потому что она остановлена ​​и не будет завершена». – AJ222

+0

Да! «stopSystem» будет «приостанавливать» систему. И его можно снова перезапустить с помощью 'resetSystem'. – Bivis

+0

Я просмотрел его, и мне кажется, что это не так, поскольку эмиттер удаляется. Я видел в коде ccparticlesystem условие для удаления с использованием свойства autoRemoveOnFinish: if (particleCount == 0 && autoRemoveOnFinish_). stopSystem сделает particleCount равным 0 через несколько секунд (в зависимости от продолжительности жизни частиц, так как больше частиц не будет выбрасываться). Я думаю, что это, как предполагается, способ удалять излучателя «красивым» способом, мудрый (он будет выглядеть лучше, чем «выдернуть» систему частиц вместе со всеми живыми частицами с помощью removeChild). – am1987