Reputation: 123
I essentially want to emit confetti particles. Each particle is the same shape, however, I want each particle to be a random colour from a selection of colors I specify.
Is there a way for each emitted particle to have a random color or do I need a separate emitter for each particle color?
Upvotes: 11
Views: 5474
Reputation: 684
Just for anyone else who might want an answer to this. There is a framework called SAConfettiView
https://github.com/sudeepag/SAConfettiView. Definitely check it out! It worked for me.
Upvotes: 0
Reputation: 13665
You can use 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 duration of wait action to get different results.
You can play with color ramp too (in particle editor) to achieve the same effect:
Or you can use particleColorSequence and SKKeyframeSequence in order to change particle color over its lifetime. Hope this helps.
Upvotes: 8