好吧,看来您不能为SKEmitterNode 使用预定义的sks 文件...我能够通过以编程方式创建SKEmitterNode 来解决这个问题。原因是因为当您使用sks 启动SKEmitterNode 时,它看起来不像,它不会响应setParticleColor:,而是以编程方式启动它。
今天,过去的一个小时,是我第一次弄乱 SKEmitterNode,所以你必须忍受我,因为我不知道如何使雪效果完美,但我敢肯定你可以乱用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];
}
所以我在这里所做的是以编程方式创建粒子效果,在这里您将更改动画/速度/等变量以获得您正在寻找的最佳粒子效果。
我建议reading this 了解更多详情。
现在还记得我说过它需要在 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 */
}
在这种情况下,我们将颜色更改为随机 RGB 值,但我会让您自己选择颜色。
作为回报,这是我的代码所产生的:
说了这么多,不幸的是,仅使用粒子界面似乎无法获得想要的效果。