我正在尝试设置一组 16 个节点来按顺序发射粒子以形成图案。
我能够同时激活它们,在不同的节点上使用不同的粒子系统,但我无法让节点以顺序方式激活。 粒子系统本身已经处于事件和非事件循环状态。
也许这是错误的方法,我应该使用操作,但我不知道。
有一个 while (self.fWorksequence == 2)
调用 Sequence2()
,它确实激活了我需要的节点上的粒子,但这一切都在同一时间。我需要让它们滞后:节点 f1 触发,等待 1 秒,节点 f2 和 f16 同时触发,再等待一秒,节点 f3 和 f15 同时触发。
var fWCycle = 1
func Sequence2() {
if self.fWCycle == 1 {
sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
if node.name == "f1" {
let fWorkBoom = self.launchFWork1(color: UIColor.red)
node.addParticleSystem(fWorkBoom)
}
}
} else if self.fWCycle == 31 {
sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
if node.name == "f2" {
let fWorkBoom = self.launchFWork1(color: UIColor.red)
node.addParticleSystem(fWorkBoom)
}
if node.name == "f16" {
let fWorkBoom = self.launchFWork1(color: UIColor.red)
node.addParticleSystem(fWorkBoom)
}
}
}
...
//check the cycle stage
if self.fWCycle <= 100 {
self.fWCycle += 1
} else if self.fWCycle > 600 {
self.fWorkSequence = 1
}
}
*编辑 尝试过
func Sequence2() {
timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
}
然后
var timer = Timer()
var nodeCounter = 0
@objc func timerAction() {
self.nodeCounter += 1
if self.nodeCounter == 1 {
self.sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
if node.name == "f1" {
let fWorkBoom = self.launchFWork1(color: UIColor.red)
node.addParticleSystem(fWorkBoom)
}
}
}...
}
现在内存使应用程序崩溃......
最佳答案
我不知道如何用代码来做到这一点,尝试了计时器和循环,但要么没有任何效果,要么由于内存问题而不断崩溃。 所以我最终通过在 Blender 中对整个事情进行动画处理然后将该文件与所有正确的时间导入到 xcode 来解决。效果很好。 如果将来有人发现这个,我仍然想知道如何通过代码来做到这一点。 谢谢!
关于ios - 如何让节点以不同的顺序/模式发射粒子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55590265/