2016-02-15 4 views
2

Документация SKEmitterNode говорит, что particleLifetime свойство:Что такое SKEmitterNode particleLifetime?

Среднее время жизни частицы, в секундах.

Я вижу что-то рыбное в xcode 7.2.1. Поскольку я пытался изменить излучатель взрыва, я ожидал, что увеличение значения времени жизни частиц в редакторе приведет к увеличению общего размера взрыва ... частицы будут жить дольше и, таким образом, будут двигаться дальше. Я не хочу увеличивать скорость, которую они расширяют, мне нравится текущая скорость. Я просто хочу, чтобы они путешествовали дальше и создавали больший «взрыв».

Однако вместо этого то, что я действительно вижу в xcode, заключается в том, что взрыв остается точно такого же размера, но интервал между рисунками увеличивается. Я вижу, что, если я отрегулирую время жизни частицы до, скажем, 0,5, xcode повторно вызывает взрыв. Если я отрегулирую интервал до, скажем, 20, xcode рисует точно такой же взрыв размером один раз каждые ~ 20 секунд. Это совсем не то, чего я ожидал.

Я создал эмиттер через Xcode с:

  • Текстура: spark.png уровень рождаемости
  • частиц: 5500
  • Максимальные Particles: 2266
  • начальный угол: 0
  • Угол Диапазон: 360
  • Скорость: 70
  • Ускорение: 0
  • Цвет рампа от белого до желтого

и попытался следующий эксперимент:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    SKEmitterNode *node = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"]; 
    SKEmitterNode *node2 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"]; 
    SKEmitterNode *node3 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"]; 
    SKEmitterNode *node4 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"]; 

    for (UITouch *touch in touches) 
    { 
     CGPoint touchPoint = [touch locationInNode:layerWorld]; 
     CGPoint left = CGPointMake(touchPoint.x - 100, touchPoint.y); 
     CGPoint right = CGPointMake(touchPoint.x + 100, touchPoint.y); 
     CGPoint top = CGPointMake(touchPoint.x, touchPoint.y + 100); 
     CGPoint bottom = CGPointMake(touchPoint.x, touchPoint.y - 100); 

     node.particleLifetime = .10; 
     node2.particleLifetime = .99; 
     node3.particleLifetime = 1.5; 
     node4.particleLifetime = 300; 

     node.position = left; 
     node2.position = right; 
     node3.position = top; 
     node4.position = bottom; 

     [layerWorld addChild:node4]; 
     [layerWorld addChild:node3]; 
     [layerWorld addChild:node2]; 
     [layerWorld addChild:node]; 

    } 

с четырьмя узлами распирает на экране в то же время, результаты:

Для жизни < = 0.99: Форма всего взрыва действительно меняется. меньшие значения перемещаются на более короткие расстояния и приводят к меньшим взрывам, которые быстрее исчезают из вида.

на всю жизнь> = 1.0: размер взрыва ограничен; любое значение от 1 до 2 250 создает точно такой же размер взрыва, который остается видимым ровно за такое же время. Частица со временем жизни 2000 не остается видимой дольше, чем частица со временем жизни 1,0. Кроме того, для любого времени жизни> 1.00 частица не полностью заполняет рампу цвета. Этот излучатель перемещается от белого до желтого. Все длительности < 1.0 завершают рампу на желтый. Все значения> 1.0 заметно «белее» (хотя они одновременно исчезают на экране)

Я сейчас полностью смущен относительно того, что должно делать particleLifetime. Только значения от 0.0 до 1.0 сделали видимые изменения. тот факт, что цветовая рампа не заканчивается для длительностей> 1,0, заставляет меня думать, что частицы знают, что они должны прослужить дольше и иметь больше времени для изменения цветов. Но они исчезают из виду, прежде чем это завершается.

Что я здесь делаю неправильно? почему частицы в узле4 не перемещаются заметно - и в конечном итоге - на экране в течение пяти минут? Почему они исчезают из вида в то же время, что и node3?

ответ

2

Если свойство вашего эмиттера particleSpeedScale отрицательное, ваши частицы уменьшатся в размере до тех пор, пока они не будут видны до того, как прошло particleLifetime секунд.

Свойство particleSpeedScale влияет

скорости, при которой коэффициент изменения масштаба частицы в секунду.

где положительное значение увеличивает размер частиц с течением времени, а отрицательное значение уменьшает размер частиц.

Например, если начальный размер частиц 1 и

particleSpeedScale = 0.5 

размер частицы будет 1,5 через 1 секунду, 2,25 после 2 секунд, и т.д.

Если начальный размер частиц 1 и

particleSpeedScale = -0.5 

размер частицы будет 0,5 через 1 секунду, 0,25 после 2 секунд, и т.д.

Предлагаю начать с установки particleSpeedScale = 0. Это приведет к тому, что размер частиц останется постоянным на протяжении всего жизненного цикла. Отрегулируйте свойство по мере необходимости.