SpriteKit 粒子发射器改变颜色
SpriteKit particle emitter change color
我已经使用编辑器创建了粒子效果,现在我想在代码中更改 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]
这算不上答案,但我无法将其全部放入评论中,所以...请多多包涵。
好消息是您的代码似乎有效!
我尝试创建一个新的 Sprite Kit 项目并将您的代码粘贴到其中,所以我最终得到了 SKScene
类型的 GameScene
class,如下所示:
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
。
当我运行那个时,我可以看到这个:
那么...那会给我们留下什么?
我想您的设置一定有所不同。
如果您尝试创建一个像我这样的新示例项目,您能让它工作吗?
是的...我知道这不是一个答案,但至少可以将其视为您走在正确道路上的保证:)
我已经使用编辑器创建了粒子效果,现在我想在代码中更改 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]
这算不上答案,但我无法将其全部放入评论中,所以...请多多包涵。
好消息是您的代码似乎有效!
我尝试创建一个新的 Sprite Kit 项目并将您的代码粘贴到其中,所以我最终得到了 SKScene
类型的 GameScene
class,如下所示:
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
。
当我运行那个时,我可以看到这个:
那么...那会给我们留下什么?
我想您的设置一定有所不同。 如果您尝试创建一个像我这样的新示例项目,您能让它工作吗?
是的...我知道这不是一个答案,但至少可以将其视为您走在正确道路上的保证:)