什么是SKEmitterNode particleLifetime?

时间:2016-02-15 02:08:43

标签: ios xcode sprite-kit particles skemitternode

SKEmitterNode的文档说明particleLifetime属性为:

  

粒子的平均寿命,以秒为单位。

我在xcode 7.2.1中看到了一些可疑的东西。当我试图修改爆炸发射器时,我预计在编辑器中增加粒子寿命值会使爆炸的总大小更大......粒子会活得更长,因此行程更远。我不想提高他们扩展的速度,我喜欢当前的速度。我只是希望他们更远的地方旅行并创造一个更大的爆炸。"

然而,相反,我在xcode中实际看到的是爆炸保持完全相同的大小,但绘制之间的间隔变得更长。我看到,如果我将粒子寿命调整到0.5,则xcode会反复绘制爆炸。如果我将间隔调整到20,那么xcode会每隔~20秒抽取一次相同大小的爆炸。那根本不是我所期待的。

我通过xcode创建了一个发射器:

  • Texture: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:整个爆炸的形状确实发生了变化。较小的值传播较短的距离并导致较小的爆炸从视野中消失得更快。

终身&gt; = 1.0:爆炸的大小有上限;从1到2,250的任何值都会产生完全相同的爆炸大小,并且在完全相同的时间内保持可见。寿命为2,000的颗粒不会比寿命为1.0的颗粒保持可见。此外,对于任何寿命&gt; 1.00,粒子没有完全完成颜色渐变。这个发射器从白色到黄色。所有持续时间< 1.0完成渐变为黄色。所有值&gt; 1.0明显&#34;白色&#34; (即使它们同时从屏幕上消失)

我现在对particleLifetime应该做的事情感到十分困惑。只有0.0到1.0的值才会发生明显的变化。颜色渐变不能在持续时间内完成的事实&gt; 1.0让我觉得粒子知道它们应该持续更长时间并且有更多时间来改变颜色。但是,在完成之前,它们会从视野中消失。

我在这里做错了什么?为什么节点4中的粒子不会在屏幕上明显移动 - 并最终关闭屏幕五分钟?为什么它们在与node3完全相同的时间从视图中淡出?

1 个答案:

答案 0 :(得分:3)

如果您的发射器的particleSpeedScale属性为负数,则在particleLifetime秒过去之前,粒子的大小将会减小,直到它们不再可见为止。

particleSpeedScale属性会影响

  

粒子比例因子每秒变化的速率。

其中正值会随着时间的推移而增加粒子的大小,而负值会减小粒子的大小。

例如,如果初始粒径为1且

particleSpeedScale = 0.5

粒子的大小在1秒后为1.5,在2秒后为2.25等等。

如果初始粒径为1且

particleSpeedScale = -0.5

粒子的大小在1秒后为0.5,在2秒后为0.25等等。

我建议您先设置particleSpeedScale = 0。这将导致粒子的大小在整个生命周期中保持不变。根据需要调整属性。