SpriteKit 粒子发射器改变颜色

squ*_*o10 3 particles ios sprite-kit swift

我已经使用编辑器创建了粒子效果,现在我想更改particleColor代码。我已设置particleColorSequence为 nil(否则我的颜色将来自编辑器中的色带而不是我的代码)并particleColorBlendFactor设置为 1.0。我particleColorupdate方法中分配了一个随机颜色,希望它每次通过循环都会改变。它第一次选择随机颜色,但颜色永远不会改变。有人可以解释为什么吗?

全球的

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

didMove(查看:)

emitter?.particleColorBlendFactor = 1.0
emitter?.particleColorSequence = nil
addChild(emitter!)
Run Code Online (Sandbox Code Playgroud)

更新(_ currentTime :)

let random = Int(arc4random_uniform(UInt32(self.colors.count)))
emitter?.particleColor = colors[random]
Run Code Online (Sandbox Code Playgroud)

pbo*_*dsk 6

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

好消息是您的代码似乎可以工作!

我尝试创建一个新的 Sprite Kit 项目并将您的代码粘贴到其中,所以我最终得到了一个看起来像这样GameScene的类型SKScene

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]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

当我运行它时,我可以看到:

在此处输入图片说明

那么……这让我们何去何从?

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

是的......我知道的答案几乎没有,但可以将其视为至少您走在正确道路上的保证:)