Как сделать конфетти?

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

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


person asdfg    schedule 25.06.2015    source источник
comment
@sangony Я создал частицы, но понятия не имею, как заставить их быть случайными цветами. Долго искал в интернете и ничего не нашел.   -  person asdfg    schedule 26.06.2015


Ответы (2)


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

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])))


    }

}

РЕДАКТИРОВАТЬ:

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

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

введите здесь описание изображения

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

person Whirlwind    schedule 26.06.2015
comment
Но это не даст смешивания цветов, как это нужно для конфетти. Вы бы получили какой-то цвет только на секунду, затем еще один на следующую и так далее. Все частицы были бы одного цвета, просто цвет менялся бы каждую секунду. Это выглядело бы крайне неестественно. Или я неправильно понимаю код? - person asdfg; 26.06.2015
comment
Да, вы правы, я забыл изменить продолжительность действия ожидания. Пожалуйста, проверьте редактирование. - person Whirlwind; 26.06.2015

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

person Kervon Ryan    schedule 27.01.2017
comment
этот выглядит хорошо, но моя частота кадров упала на 20 кадров в секунду на iPad mini 4. - person Ron Myschuk; 30.05.2017