2015-06-25 22 views
7

Ich möchte im Wesentlichen Konfettipartikel emittieren. Jedes Partikel hat die gleiche Form. Ich möchte jedoch, dass jedes Partikel eine zufällige Farbe aus einer Auswahl von Farben ist, die ich spezifiziere.Wie mache ich Konfetti?

Gibt es eine Möglichkeit für jedes emittierte Partikel eine zufällige Farbe zu haben oder brauche ich einen separaten Emitter für jede Partikelfarbe?

+2

@sangony Ich habe die Partikel erstellt, aber ich habe keine Ahnung, wie man sie zu zufälligen Farben bringt. Ich schaute lange online und konnte nichts finden. – asdfg

Antwort

7

Sie können einzelne Sender verwenden, um zu erreichen, was Sie wollen:

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:

Versuchen Dauer der Warte Aktion zu ändern unterschiedliche Ergebnisse zu erzielen.

Sie können auch mit Farbrampe spielen (in Partikel Editor), um die gleiche Wirkung zu erzielen:

enter image description here

Oder Sie können particleColorSequence und SKKeyframeSequence verwenden, um Partikelfarbe über die gesamte Lebensdauer zu ändern. Hoffe das hilft.

+0

Aber das würde nicht eine Mischung von Farben geben, wie Sie für Konfetti benötigen würden. Sie würden nur eine Farbe für eine Sekunde bekommen, dann eine andere für die nächste und so weiter. Die Partikel würden alle dieselbe Farbe haben, die Farbe würde sich jede Sekunde ändern. Es würde extrem unnatürlich aussehen. Oder missverstehe ich den Code? – asdfg

+0

Ja, du hast recht, ich habe vergessen, die Dauer der Warteaktion zu ändern. Bitte überprüfen Sie die Bearbeitung. – Whirlwind

0

Nur für alle anderen, die eine Antwort darauf möchten. Es gibt ein Framework namens SAConfettiViewhttps://github.com/sudeepag/SAConfettiView. Überprüfen Sie es auf jeden Fall! Es hat für mich funktioniert.

+0

dieser sieht gut aus, aber fiel meine Bildrate um 20fps auf einem iPad mini 4 –