How do I make confetti?

5.2k views Asked by At

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?

2

There are 2 answers

2
Whirlwind On BEST ANSWER

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:

enter image description here

Or you can use particleColorSequence and SKKeyframeSequence in order to change particle color over its lifetime. Hope this helps.

1
Kervon Ryan On

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.