指定随机粒子起始颜色没有动画更改?

fuz*_*oat 6 objective-c sprite-kit skemitternode

有没有办法让粒子基于当前的"颜色渐变"以随机的每粒子颜色生成?颗粒在其使用寿命期间不会改变颜色,它们只是在出生时沿着"颜色斜坡"的某处分配颜色,并保持颜色直到它们死亡.

其结果是出生时的颗粒混合,从RED到BLUE的混合颜色.

颜色混合

在我的测试中,我似乎只能得到粒子产生为RED的行为,然后逐渐转向BLUE作为接近屏幕的底部.

在此输入图像描述 落叶

Joh*_*ato 8

好吧,看起来你不能使用预定义的sks文件SKEmitterNode...我能够通过编程创建它来解决这个问题SKEmitterNode.原因是因为它看起来不像你发起一个SKEmitterNodesks,它没有响应,setParticleColor:但以编程方式启动一个.

今天,过去一小时,这是我第一次搞乱SKEmitterNode,所以你必须忍受我,因为我无法弄清楚如何让雪效果完美,但我相信你可以混乱的价值观SKEmitterNode允许你改变.

在任何情况下,我都会假设它SKEmitterNode是在SKScene上呈现的(这是我知道如何获得所需效果的唯一方式).

首先,你需要让你SKEmitterNode成为一个全局/属性/ etc,因为你以后需要访问它.


MyScene.m:

@implementation MyScene {
    SKEmitterNode* leafEmitter;
}

-(id)initWithSize:(CGSize)size {    
        leafEmitter = [[SKEmitterNode alloc] init];
        [leafEmitter setParticleTexture:[SKTexture textureWithImageNamed:@"saFMB.png"]];
        [leafEmitter setParticleBirthRate:10];
        [leafEmitter setScale:0.5];
        [leafEmitter setYAcceleration:-10.0];
        [leafEmitter setParticleSpeedRange:100];
        [leafEmitter setParticleLifetimeRange:100.0];
        [leafEmitter setParticlePositionRange:CGVectorMake(self.size.width, self.size.height)];
        [leafEmitter setPosition:CGPointMake(100, 400)];
        [leafEmitter setParticleBlendMode:SKBlendModeAlpha];
        [self addChild:leafEmitter];
}
Run Code Online (Sandbox Code Playgroud)

所以我在这里所做的是以编程方式创建粒子效果,这是您将更改动画/速度/等变量以获得您正在寻找的最佳粒子效果的位置.我建议阅读这个以获取更多细节.


现在还记得我是怎么说它需要在SKScene上展示的吗?那是因为我们将利用update:(CFTimeInterval)currentTime随附的功能SKScene.

里面update:(CFTimeInterval)currentTime是我们将改变SKEmitterNode颜色的位置.由于每个帧都会调用此更新功能,因此可以轻松更改颜色,而无需任何花哨的计时器等.不确定这是不是一个好主意,但重要的是这个想法.

-(void)update:(CFTimeInterval)currentTime {
[leafEmitter setParticleColor:[UIColor colorWithHue:drand48() saturation:1.0 brightness:1.0 alpha:1.0]];
[leafEmitter setParticleColorBlendFactor:1.0];
    /* Called before each frame is rendered */
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们将颜色更改为随机RGB值,但我会让您自己选择颜色.


作为回报,这是我的代码产生的:

在此输入图像描述


所有这些说,不幸的是,看起来你不能单独使用粒子界面获得你想要的效果.