我正在尝试建立一组16个节点来按顺序拍摄粒子以形成图案。
我能够同时激活它们,在不同的节点上使用不同的粒子系统,但我无法以顺序方式激活节点。粒子系统本身已经循环活动且不活动。
也许这是错误的方法,我应该使用Actions,但我不知道。
有一个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。工作得很完美。如果有人在将来发现这一点,我仍然想知道如何通过代码来做到这一点。谢谢!