SCNAction для изменения цвета узла работает один раз, потом никогда - PullRequest
0 голосов
/ 28 февраля 2019

Все еще ориентируюсь в Swift, будьте осторожны; -)

Я настроил действие, чтобы изменить цвет узла, который я называю каждые несколько секунд.Он работает как брелок при первом вызове, но после этого цвет остается прежним.Мой код:

let duration: TimeInterval = 3
var myRed = 255
var myGreen = 0
var myBlue = 0

var voltage: UInt32 = 0 {
    willSet(newV) { }
    didSet {

        myGreen = Int.random(in: 0...255)

        let act1 = SCNAction.customAction(duration: duration, action: { (node, elapsedTime) in
            let percentage = elapsedTime / CGFloat(self.duration)
                self.backgroundNode.geometry?.firstMaterial?.diffuse.contents = self.aniColor(from: self.oldColor, to: self.newColor, percentage: percentage)
            })

            if backgroundNode.action(forKey: "color") == nil {
                print("Running action")
                oldColor = newColor
                newColor =
                    UIColor(red: CGFloat(myRed), green: CGFloat(myGreen), blue: CGFloat(myBlue), alpha: 1.0)
                backgroundNode.runAction(act1, forKey: "color")
            }
        }
        print("new color: \(newColor)")
        print("old color: \(oldColor)")
    }
}

Печать значений RBG из функции aniColor показывает, что значения действительно меняются, поэтому я озадачен, почему он работает только один раз.Также приветствуются альтернативные решения для того, чтобы цвет узла перешел в другой цвет.

Спасибо за ваше время.

РЕДАКТИРОВАТЬ: Очевидно, мне не разрешено комментировать свой собственный вопрос.Вздох.Но ответ в комментариях, спасибо E.Coms.

...