Как заставить узлы снимать частицы в разных последовательностях / шаблонах? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать группу из 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)
                }
            }
        }...
    }

А теперь память вылетает из приложения ...

1 Ответ

0 голосов
/ 11 апреля 2019

Я не мог понять, как это сделать с кодом, пробовал Timers and Loops и либо не получал ничего, либо постоянные сбои из-за проблем с памятью. Так что я решил решить, анимировав все это в Blender, а затем импортировав этот файл со всеми правильными временами в xcode. Работал отлично. Если кто-нибудь найдет это в будущем, я все равно хотел бы знать, как это сделать с помощью кода. Спасибо!

...