OStack程序员社区-中国程序员成长平台

标题: ios - SKEmitterNode 粒子生命周期到底是什么? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 10:29
标题: ios - SKEmitterNode 粒子生命周期到底是什么?

SKEmitterNode 的文档说 particleLifetime 属性是:

The average lifetime of a particle, in seconds.

不过,我在 xcode 7.2.1 中看到了一些可疑之处。当我尝试修改爆炸发射器时,我预计在编辑器中增加粒子生命周期值会使爆炸的总大小更大……粒子的生命周期更长,因此传播得更远。我不想增加它们扩展的速度,我喜欢目前的速度。我只是想让他们走得更远,创造更大的“爆炸”。

然而,相反,我在 xcode 中实际看到的是爆炸保持完全相同的大小,但绘制之间的间隔变长了。我看到如果我将粒子生命周期调整为 0.5,xcode 会反复绘制爆炸。如果我将间隔调整到 20,xcode 会绘制完全相同大小的爆炸,每约 20 秒一次。这根本不是我所期待的。

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

并尝试了以下实验:

-(void) touchesBeganNSSet *)touches withEventUIEvent *)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:整个爆炸的形状确实发生了变化。较小的值传播较短的距离,并导致较小的爆炸消失得更快。

for life >= 1.0:爆炸的大小有上限;从 1 到 2,250 的任何值都会产生完全相同大小的爆炸,并且在完全相同的时间内保持可见。生命周期为 2,000 的粒子不会比生命周期为 1.0 的粒子保持可见的时间更长。此外,对于任何 > 1.00 的生命周期,粒子都不会完全完成色带。该发射器从白色渐变到黄色。所有持续时间 < 1.0 的时间都完成了黄色的渐变。所有大于 1.0 的值都明显“更白”(即使它们同时从屏幕上消失)

我现在对 particleLifetime 应该做什么感到非常困惑。只有从 0.0 到 1.0 的值有明显的变化。颜色渐变在持续时间 > 1.0 时没有完成的事实让我认为粒子知道它们应该持续更长时间并且有更多时间改变颜色。但是,它们在完成之前就从视野中消失了。

我在这里做错了什么?为什么节点 4 中的粒子在五分钟内没有明显地在屏幕上移动并最终离开屏幕?为什么它们会在与 node3 完全相同的时间从 View 中消失?



Best Answer-推荐答案


如果您的发射器的 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 开始。这将导致粒子的大小在整个生命周期中保持不变。根据需要调整属性。

关于ios - SKEmitterNode 粒子生命周期到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400479/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4