有没有一种方法可以使粒子以基于当前“颜色坡道”的随机颜色生成?这些粒子在它们的寿命期间不会改变颜色,它们仅在出生时从“颜色坡道”中的某个位置分配颜色,并保持该颜色直到它们死亡。
这将导致在出生时混合从红色到蓝色的颜色的粒子。
在我的测试中,我似乎只能获得粒子生成为红色,然后随着它们接近屏幕底部逐渐变为蓝色的行为。
这将导致在出生时混合从红色到蓝色的颜色的粒子。
在我的测试中,我似乎只能获得粒子生成为红色,然后随着它们接近屏幕底部逐渐变为蓝色的行为。
sks
文件来创建SKEmitterNode
...我通过以编程方式创建SKEmitterNode
来解决了这个问题。原因是当你使用sks
初始化一个SKEmitterNode
时,它似乎不会响应setParticleColor:
,但以编程方式初始化就可以。SKEmitterNode
允许更改的值来实现。SKEmitterNode
在SKScene上呈现(这是我知道如何获得你想要的效果的唯一方法)。SKEmitterNode
作为全局/属性等进行声明,因为稍后你需要访问它。
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];
}
SKScene
一起提供的update:(CFTimeInterval)currentTime
函数。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 */
}
import Foundation
import SpriteKit
class RandomColorEmitterNode : SKEmitterNode {
override init() {
super.init()
self.particleColorSequence = nil
self.particleColorBlendFactorSequence = nil
self.particleColorBlueRange = 255
self.particleColorGreenRange = 255
self.particleColorRedRange = 255
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.particleColorSequence = nil
self.particleColorBlendFactorSequence = nil
self.particleColorBlueRange = 255
self.particleColorGreenRange = 255
self.particleColorRedRange = 255
}
}
通过简单的调用:
if let emitter = RandomColorEmitterNode(fileNamed: "flower.sks") {
self.addChild(emitter)
}
发射器最初从您在编辑器中创建的SKS文件加载,然后颜色属性被类覆盖。