使用滑块控制SCNAction

时间:2018-04-11 13:43:42

标签: swift scenekit

我正在为我的问题寻找解决方案: 我已经使用Xcode中的动作编辑器将动画定义为SCNAction。现在我想用滑块控制它。因此,基本上操纵滑块会在动画中显示特定的时间/帧。

现在,我可以暂停/播放动画或将其重置为开头。我使用Swift代码从动作编辑器中解决了SCNAction。

据我研究,没有可能 将SCNAction立即设置为特定时间并在那里停止。那会有用。

如果SCNActions无法实现这一目标,我也会对其他尝试感兴趣。这可能是根本无法实现的。谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:我从.dae文件中加载了CAAnimation(对于这个看起来:https://stackoverflow.com/a/24924702/9625548,位过时但仍然可用)。

使用SCNAnimationPlayer,我可以使用密钥解决CAAnimation问题。有以下几点 代码我可以用UISlider

控制我的动画
let moment: TimeInterval = TimeInterval(self.animationTimeSlider.value)
guard let animationPlayer: SCNAnimationPlayer = node.animationPlayer(forKey: key) else{
                    return
                }
animationPlayer.animation.timeOffset = moment
animationPlayer.play()
animationPlayer.speed = 0.0

基本上,我读了拇指并将其转换为TimerInterval。如果找不到给定密钥的SCNAnimationPlayer,我正在寻找SCNAnimationPlayer并中止。然后我将.timeOffset设置为我想要显示的那一刻。使用play(),动画从头开始+ .timeOffset。最后,将.speed设置为零。动画没有运行,但显示了时刻。

注意:如果您让动画运行并以这种方式操作它,则必须重置它。否则就会搞砸了。您可以使用布尔值来捕获该情况,如果您让动画正常运行,则会保存。然后你知道在使用滑块进行操作之前必须重置它。例如:

node.removeAllAnimations() node.addAnimation(animation, forKey: key) self.sceneView.scene.rootNode.animationPlayer(forKey: key)?.paused = true