You can use a single emitter to achieve what you want:
import SpriteKit class GameScene: SKScene, SKPhysicsContactDelegate { let emitter = SKEmitterNode(fileNamed: "particle") let colors = [SKColor.whiteColor(),SKColor.grayColor(),SKColor.greenColor(),SKColor.redColor(),SKColor.blackColor()] override func didMoveToView(view: SKView) { self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) emitter.position = CGPoint(x: 200, y:300) emitter.particleColorSequence = nil emitter.particleColorBlendFactor = 1.0 self.addChild(emitter) let action = SKAction.runBlock({ [unowned self] in let random = Int(arc4random_uniform(UInt32(self.colors.count))) self.emitter.particleColor = self.colors[random]; println(random) }) let wait = SKAction.waitForDuration(0.1) self.runAction(SKAction.repeatActionForever( SKAction.sequence([action,wait]))) } }
EDIT:
Try changing the duration of the wait to get different results.
You can also play with the color ramp (in the particle editor) to achieve the same effect:

Or you can use particleColorSequence and SKKeyframeSequence to change the color of the particles during its lifetime. Hope this helps.
Whirlwind
source share