Все еще ориентируюсь в 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.