2015-06-25 11 views
7

Я по существу хочу испустить частицы конфетти. Каждая частица имеет одинаковую форму, однако я хочу, чтобы каждая частица была случайным цветом из набора цветов, которые я указываю.Как сделать конфетти?

Есть ли способ, чтобы каждая излучаемая частица имела случайный цвет или мне нужен отдельный излучатель для каждого цвета частиц?

+2

@sangony Я создал частицы, но я понятия не имею, как заставить их быть случайными цветами. Я долго смотрел онлайн и ничего не мог найти. – asdfg

ответ

7

Вы можете использовать одиночный излучатель для достижения того, что вы хотите:

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:

Попробуйте изменить продолжительность ожидания действий, чтобы получить разные результаты.

Вы можете играть с цветом рампе тоже (в редакторе частиц), чтобы достичь того же эффекта:

enter image description here

Или вы можете использовать particleColorSequence и SKKeyframeSequence для того, чтобы изменить цвет частиц в течение его срока службы. Надеюсь это поможет.

+0

Но это не дало бы сочетание цветов, как вам нужно для конфетти. Вы бы получили только цвет на секунду, затем еще один на следующий и так далее. Все частицы будут одного цвета, цвет будет меняться каждую секунду. Это выглядело бы крайне неестественно. Или я не понимаю код? – asdfg

+0

Да, вы правы, я забыл изменить продолжительность действия ожидания. Проверьте изменения. – Whirlwind

0

Только для тех, кто хочет получить ответ на этот вопрос. Существует каркас под названием SAConfettiViewhttps://github.com/sudeepag/SAConfettiView. Определенно проверьте это! Это сработало для меня.

+0

этот выглядит хорошо, но снизил частоту кадров на 20 кадров в секунду на iPad mini 4 –