Что такое SKEmitterNode частица Lifetime?

В документации для SKEmitterNode сказано, что свойство particleLifetime:

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

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

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

Я создал эмиттер через xcode с помощью:

  • Текстура: spark.png
  • Рождаемость частиц: 5500
  • Максимум частиц: 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 до 2250 создает точно такой же размер взрыва, который остается видимым точно такое же количество времени. Частица со временем жизни 2000 не остается видимой дольше, чем частица со временем жизни 1,0. Кроме того, для любого времени жизни > 1,00 частица не полностью завершает цветовую шкалу. Этот эмиттер изменяется от белого к желтому. Все длительности ‹ 1,0 завершают переход к желтому цвету. Все значения > 1.0 заметно "белее" (даже если они исчезают с экрана одновременно)

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

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


person Thunk    schedule 15.02.2016    source источник


Ответы (1)


Если свойство 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. Это приведет к тому, что размер частиц останется постоянным на протяжении всего жизненного цикла. Настройте свойство по мере необходимости.

person 0x141E    schedule 15.02.2016