2013-11-09 2 views
5

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

ответ

7

Вы можете рассчитать, когда эмиттер выполнен.

Например, если numParticlesToEmit установлено на 1000, а particleBirthRate равно 100, то частица будет производиться с использованием новых частиц через 10 секунд. Затем вы должны добавить particleLifeTime с половиной particleLifeTimeRange, чтобы учесть, что частицы времени останутся на экране. После этого излучатель не только испускает новые частицы, но и последние и/или долгоживущие излучаемые частицы будут удалены с экрана.

Предполагая em ваш эмиттер:

CGFloat seconds = em.numParticlesToEmit/em.particleBirthRate + 
        em.particleLifetime + em.particleLifetimeRange/2; 

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

+0

Далеко лучше, я совершенно неправильно понял вопрос и почему-то думал, что numParticlesToEmit неизвестен. Математика замечательная. – prototypical

0

Я не могу найти способ проверить количество активных частиц. Я думал, возможно, это возможно с дочерними свойствами, которые он наследует от SKNode, но это не работает.

Я заметил свойство particleAction для SKEmitterNode, который имеет эту аннотацию:

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

Возможно, вы можете использовать SKAction performSelector, чтобы уведомить вас об активных частицах. Когда этот поток заканчивается, вы можете предположить, что частиц не осталось.

Не очень элегантное или идеальное решение любым способом, и я сам был бы заинтересован в правильном решении.