SpriteKit粒子发射器更改颜色。

4
我用编辑器创建了一个粒子效果,现在我想在代码中更改particleColor。我将particleColorSequence设置为nil(否则颜色将来自编辑器中的颜色坡道而不是我的代码),并将particleColorBlendFactor设置为1.0。我在update方法中分配随机颜色给particleColor,希望它会在每次循环时改变。它确实在第一次循环时选择了一个随机颜色,但之后颜色从未变化。有人能解释一下为什么吗?
let emitter = SKEmitterNode(fileNamed: "squares.sks")
let colors = [SKColor.red, SKColor.green, SKColor.blue]

didMove(to view:)

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

update(_ currentTime:)

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

6
这不算是一个完整的答案,但我无法将所有内容都放进一个评论里,请您见谅。
好消息是您的代码似乎可以工作!
我尝试创建了一个新的Sprite Kit项目,并将您的代码粘贴到其中,因此我得到了一个类型为SKScene的GameScene类,其代码如下:
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 那么...这对我们有什么影响?
我想你的设置肯定有所不同。如果您尝试像我的示例项目一样创建一个新项目,您能使其正常工作吗?
是的...我知道这几乎不算答案,但至少将其视为您已走上正确的道路的保证 :)

我给你点赞,因为你说得对,我的代码没有问题。然而,粒子编辑器有很大的问题。我像你上面所做的那样创建了一个新的火焰发射器,它起作用了!所以我开始逐个更改编辑器中的设置,直到我的火焰发射器与原始发射器完全相同。它们现在是一模一样的,包括每个小数点和负号。但是我的原始发射器仍然不会改变颜色,而曾经的火焰发射器却完美地工作。太荒谬了! - squarehippo10
非常感谢您的信任。很高兴最终您已经解决了问题。然而,我想知道您原来的发射器和新发射器之间有什么区别。这里有一些问题供您考虑(我的意思是:如果您不想回答这里的问题,那么您可以不回答 :)) 您是在代码中创建原始发射器还是从模板文件中创建的?它是在不同版本的Xcode中创建的吗? - pbodsk
如果你真的很绝望,可以尝试在文本编辑器中打开这两个.sks文件,看看是否能发现任何差异...或者在终端中尝试使用diff命令(https://dev59.com/Pmct5IYBdhLWcg3wZcqL)。祝你好运 :) - pbodsk
所以,为了找出问题的根源,我今天将新的发射器换成了旧的...它居然起作用了!这太疯狂了,因为我根本没有改变原始文件。(几天前我在粒子编辑器中创建了它。)我在使用这个版本的Xcode时遇到了一些不稳定性。也许我只需要重新安装它。 - squarehippo10
哈哈...电脑啊 ¯_(ツ)_/¯ 很高兴你弄清了谜团,很抱歉没有合乎逻辑的解释...但是...继续下一个问题吧 :) - pbodsk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接