Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit粒子发射器更改颜色_Ios_Swift_Sprite Kit_Particles - Fatal编程技术网

Ios SpriteKit粒子发射器更改颜色

Ios SpriteKit粒子发射器更改颜色,ios,swift,sprite-kit,particles,Ios,Swift,Sprite Kit,Particles,我已经使用编辑器创建了粒子效果,现在我想在代码中更改particleColor。我已将particleColorSequence设置为nil(否则,我将使用编辑器中的颜色渐变,而不是我的代码),并且particleColorBlendFactor设置为1.0。我在update方法中为particleColor指定了一个随机颜色,希望它在循环中每次都会改变。它确实会在第一次选择一种随机的颜色,但是颜色永远不会改变。有人能解释一下原因吗 全球 let emitter = SKEmitterNode(

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

全球

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

更新(\uCurrentTime:)


这几乎算不上一个答案,但我无法将其全部纳入评论中,所以…请容忍我

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

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

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
(我使用fire…只是为了选择一些东西),并将其命名为
squares.sks

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

那么…那我们该怎么办? 我想你的设置一定有些不同。 如果你尝试创建一个像我这样的新示例项目,你能让它工作吗


是的……我几乎不知道答案,但我认为这是一种保证,至少你在正确的道路上:)

我给了你信任,因为你是对的,我的代码没有问题。但是,粒子编辑器有一些非常错误的地方。我创建了一个新的火发射器,就像你在上面做的一样,它工作了!因此,我开始在编辑器中一个接一个地进行更改,直到我的火焰发射器与原始发射器完全相同。它们现在是相同的,一个接一个,每个小数点和负号都包括在内。但我的原作仍然没有改变颜色,而曾经的火焰发射器工作得非常完美。可笑!谢谢你的信用。很高兴你终于成功了。然而,我想知道你原来的发射器和新的发射器有什么不同。这里有一些问题让你考虑(我的意思是:如果你不喜欢它,你不必在这里回答):你是在代码中创建了原始代码还是从模板文件中创建的?它是在不同版本的Xcode中创建的吗?如果您真的很绝望,可以尝试在文本编辑器中打开这两个.sks文件,看看是否可以发现其中的差异…或者在终端()中尝试diff命令。祝你好运:)所以,为了弄清事情的真相,我今天把新的发射器换成了旧的,它成功了!这太疯狂了,因为我根本没有更改原始文件。(几天前我在粒子编辑器中创建了它。)我在这个版本的Xcode中经历了相当多的剥落。也许我只需要重新安装它。哈哈……电脑,嗯_(ツ)_/''很高兴你找到了谜底,很抱歉没有合理的解释…但是…继续下一个问题:)
let random = Int(arc4random_uniform(UInt32(self.colors.count)))
emitter?.particleColor = colors[random]
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]
        }
    }
}