【问题标题】:SpriteKit particle emitter change colorSpriteKit 粒子发射器改变颜色
【发布时间】:2017-09-13 19:03:30
【问题描述】:

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

全球

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]

【问题讨论】:

    标签: ios swift sprite-kit particles


    【解决方案1】:

    这几乎不能算作一个答案,但我无法将其全部放入评论中,所以...请多多包涵。

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

    我尝试创建一个新的 Sprite Kit 项目并将您的代码粘贴到其中,所以我最终得到了一个类型为 SKSceneGameScene 类,如下所示:

    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

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

    那么……那我们会怎样?

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

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

    【讨论】:

    • 我给了你信任,因为你是对的,我的代码没有任何问题。然而,粒子编辑器有一些非常错误的地方。我像您在上面所做的那样创建了一个新的火焰发射器,并且它起作用了!因此,我开始在编辑器中一一进行更改,直到我的火焰发射器与我的原始发射器完全一样。它们现在是相同的,设置设置,包括每个小数点和负号。但是我的原件仍然没有改变颜色,而曾经的火发射器工作得很好。可笑!
    • 感谢您的信任。很高兴你最终让它工作了。但是,我想知道您的原始发射器和新发射器之间的区别是什么。这里有一些问题供您考虑(我的意思是:如果您不喜欢,您不必在这里回答它们:))您是在代码中还是从模板文件中创建了原始文件?它是在不同版本的 Xcode 中创建的吗?
    • 如果你真的很绝望,你可以尝试在文本编辑器中打开这两个 .sks 文件,看看你是否能发现其中的任何差异......或者在终端中尝试 diff 命令(@ 987654322@)。祝你好运:)
    • 所以,为了追根溯源,我今天将新的发射器换成了旧的发射器,然后……它奏效了!这太疯狂了,因为我根本没有更改原始文件。 (我几天前在粒子编辑器中创建了它。)我在这个版本的 Xcode 中体验到了相当多的脆弱性。也许我只需要重新安装它。
    • 哈哈...计算机呃¯_(ツ)_/¯ 很高兴你找到了谜底,很抱歉没有合乎逻辑的解释...但是...继续下一个问题吧:)
    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多