SKEmitterNode particleLifetime 究竟是什么?
What exactly is SKEmitterNode particleLifetime?
SKEmitterNode
的文档说 particleLifetime
属性 是:
The average lifetime of a particle, in seconds.
不过,我在 xcode 7.2.1 中发现了一些可疑的东西。当我尝试修改爆炸发射器时,我预计在编辑器中增加粒子生命周期值会使爆炸的总大小更大……粒子会寿命更长,因此传播得更远。我不想提高他们扩张的速度,我喜欢现在的速度。我只是想让他们走得更远,创造更大的"blast."
然而,相反,我在 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];
}
四个节点同时爆屏,结果为:
for lifetime <= 0.99:整个爆炸的形状确实发生了变化。值越小,传播的距离越短,爆炸越小,从视野中消失得越快。
for lifetime >= 1.0: explosion size is capped; 1 到 2,250 之间的任何值都会产生完全相同大小的爆炸,并在完全相同的时间内保持可见。寿命为 2,000 的粒子不会比寿命为 1.0 的粒子保持可见的时间更长。此外,对于任何 > 1.00 的生命周期,粒子都不会完全完成色带。该发射器从白色渐变为黄色。所有持续时间 < 1.0 的斜坡都将变为黄色。所有 > 1.0 的值都明显 "whiter"(即使它们同时从屏幕上消失)
我现在对 particleLifetime
应该做什么感到非常困惑。只有从 0.0 到 1.0 的值才会发生明显的变化。颜色渐变在持续时间 > 1.0 内没有完成这一事实让我认为粒子知道它们应该持续更长时间并且有更多时间来改变颜色。但是,在完成之前它们会从视图中消失。
我做错了什么?为什么 node4 中的粒子在 5 分钟内没有继续在屏幕上明显移动并最终离开屏幕?为什么它们与 node3 同时从视图中消失?
如果你的发射器的 particleSpeedScale
属性 是负数,你的粒子会变小,直到在 particleLifetime
秒后它们不再可见。
particleSpeedScale
属性影响
the rate at which a particle’s scale factor changes per second.
随着时间的推移,正值会增加粒子的大小,负值会减小粒子的大小。
例如,如果初始粒子大小为1并且
particleSpeedScale = 0.5
1秒后粒子大小为1.5,2秒后为2.25,依此类推
如果初始粒子大小为1且
particleSpeedScale = -0.5
1 秒后粒子大小为 0.5,2 秒后为 0.25,依此类推
我建议您先设置 particleSpeedScale = 0
。这将导致粒子的大小在整个生命周期中保持不变。根据需要调整 属性。
SKEmitterNode
的文档说 particleLifetime
属性 是:
The average lifetime of a particle, in seconds.
不过,我在 xcode 7.2.1 中发现了一些可疑的东西。当我尝试修改爆炸发射器时,我预计在编辑器中增加粒子生命周期值会使爆炸的总大小更大……粒子会寿命更长,因此传播得更远。我不想提高他们扩张的速度,我喜欢现在的速度。我只是想让他们走得更远,创造更大的"blast."
然而,相反,我在 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];
}
四个节点同时爆屏,结果为:
for lifetime <= 0.99:整个爆炸的形状确实发生了变化。值越小,传播的距离越短,爆炸越小,从视野中消失得越快。
for lifetime >= 1.0: explosion size is capped; 1 到 2,250 之间的任何值都会产生完全相同大小的爆炸,并在完全相同的时间内保持可见。寿命为 2,000 的粒子不会比寿命为 1.0 的粒子保持可见的时间更长。此外,对于任何 > 1.00 的生命周期,粒子都不会完全完成色带。该发射器从白色渐变为黄色。所有持续时间 < 1.0 的斜坡都将变为黄色。所有 > 1.0 的值都明显 "whiter"(即使它们同时从屏幕上消失)
我现在对 particleLifetime
应该做什么感到非常困惑。只有从 0.0 到 1.0 的值才会发生明显的变化。颜色渐变在持续时间 > 1.0 内没有完成这一事实让我认为粒子知道它们应该持续更长时间并且有更多时间来改变颜色。但是,在完成之前它们会从视图中消失。
我做错了什么?为什么 node4 中的粒子在 5 分钟内没有继续在屏幕上明显移动并最终离开屏幕?为什么它们与 node3 同时从视图中消失?
如果你的发射器的 particleSpeedScale
属性 是负数,你的粒子会变小,直到在 particleLifetime
秒后它们不再可见。
particleSpeedScale
属性影响
the rate at which a particle’s scale factor changes per second.
随着时间的推移,正值会增加粒子的大小,负值会减小粒子的大小。
例如,如果初始粒子大小为1并且
particleSpeedScale = 0.5
1秒后粒子大小为1.5,2秒后为2.25,依此类推
如果初始粒子大小为1且
particleSpeedScale = -0.5
1 秒后粒子大小为 0.5,2 秒后为 0.25,依此类推
我建议您先设置 particleSpeedScale = 0
。这将导致粒子的大小在整个生命周期中保持不变。根据需要调整 属性。