2015-06-25 21 views
7

In sostanza voglio emettere particelle di coriandoli. Ogni particella ha la stessa forma, tuttavia, voglio che ogni particella sia un colore casuale da una selezione di colori che specifichi.Come posso creare confetti?

Esiste un modo per ciascuna particella emessa di avere un colore casuale o è necessario un emettitore separato per ciascun colore di particella?

+2

@sangony Ho creato le particelle, ma non ho idea di come ottenere colori casuali. Ho cercato online per un po 'e non ho trovato nulla. – asdfg

risposta

7

È possibile utilizzare un'unica emettitore per ottenere ciò che si vuole:

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:

provare a cambiare la durata d'azione di attesa per ottenere risultati diversi.

si può giocare con rampa di colore troppo (in editor di particelle) per ottenere lo stesso effetto:

enter image description here

Oppure si può usare particleColorSequence e SKKeyframeSequence al fine di cambiare il colore delle particelle durante la sua vita. Spero che questo ti aiuti.

+0

Ma questo non darebbe un mix di colori, come se fosse necessario per i coriandoli. Avresti solo un po 'di colore per un secondo, poi un altro per il prossimo e così via. Le particelle sarebbero tutte dello stesso colore, il colore cambierebbe solo ogni secondo. Sembrerebbe estremamente innaturale. O sto fraintendendo il codice? – asdfg

+0

Sì, hai ragione, ho dimenticato di cambiare la durata dell'azione di attesa. Si prega di controllare la modifica. – Whirlwind

0

Solo per chiunque altro desideri una risposta a questo. Esiste un framework chiamato SAConfettiViewhttps://github.com/sudeepag/SAConfettiView. Sicuramente dai un'occhiata! Ha funzionato per me.

+0

questo sembra buono, ma ha perso la frequenza fotogrammi di 20 fps su un iPad mini 4 –

Problemi correlati