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]
}
}
}