SpriteKit粒子发射器改变颜色

时间:2017-04-18 04:45:28

标签: ios swift sprite-kit particles

我使用编辑器创建了一个粒子效果,现在我想在代码中更改particleColor。我已将particleColorSequence设置为nil(否则我的颜色将来自编辑器中的颜色渐变而不是我的代码)并且particleColorBlendFactor设置为1.0。我在particleColor方法中为update指定了一个随机颜色,希望它每次都会在循环中改变。它确实在第一次选择随机颜色,但随后颜色永远不会变化。有人可以解释一下原因吗?

全球

let emitter = SKEmitterNode(fileNamed: "squares.sks")
let colors = [SKColor.red, SKColor.green, SKColor.blue]

didMove(查看:)

emitter?.particleColorBlendFactor = 1.0
emitter?.particleColorSequence = nil
addChild(emitter!)

更新(_ currentTime:)

let random = Int(arc4random_uniform(UInt32(self.colors.count)))
emitter?.particleColor = colors[random]

1 个答案:

答案 0 :(得分:3)

这几乎不算作答案,但我无法将其全部纳入评论中,所以......请耐心等待。

好消息是您的代码似乎有效!

我尝试创建一个新的Sprite Kit项目并将您的代码粘贴到该项目中,因此我最终得到GameSceneSKScene类,如下所示:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    let emitter = SKEmitterNode(fileNamed: "squares.sks")
    let colors = [SKColor.red, SKColor.green, SKColor.blue]
    var lastUpdateTime: TimeInterval?

    override func didMove(to view: SKView) {
        emitter?.particleColorBlendFactor = 1.0
        emitter?.particleColorSequence = nil
        addChild(emitter!)
    }

    override func update(_ currentTime: TimeInterval) {
        var delta = TimeInterval()
        if let last = lastUpdateTime {
            delta = currentTime - last
        } else {
            delta = currentTime
        }
        if delta > 1.0 {
            lastUpdateTime = currentTime
            let random = Int(arc4random_uniform(UInt32(self.colors.count)))
            emitter?.particleColor = colors[random]
        }
    }
}

然后我从模板中创建了一个新的SKEmitterNode(我用火...只是为了选择一些东西)并命名为squares.sks

当我跑步时,我可以看到:

enter image description here

那么......我们离开了哪里?

我认为你的设置必须有不同的东西。 如果您尝试创建一个像我一样的新示例项目,您能够让它工作吗?

是的......我知道的答案几乎没有,但想到这至少可以保证你是在正确的道路上:)