gpt4 book ai didi

swift - 使用 slider 控制 SCNAction

转载 作者:行者123 更新时间:2023-11-30 11:35:53 28 4
gpt4 key购买 nike

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

现在,我可以暂停/播放动画或将其重置为开头。我通过从操作编辑器中寻址 SCNAction 的 Swift 代码实现了这一点。

据我研究,没有可能立即将 SCNAction 动画化到特定时间并立即停止。那行得通。

如果 SCNActions 无法实现这一点,我也对其他尝试感兴趣。也许这根本无法实现。谢谢。

最佳答案

我找到了一个解决方案:我从 .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 设置为零。动画并未运行,但显示了该时刻。

注意:如果您让动画运行并以这种方式操作它,则必须重置它。否则就会变得一团糟。如果让动画正常运行,您可以使用 bool 值捕获这种情况,该 bool 值可以保存。然后您就知道在使用 slider 进行操作之前必须重置它。例如这样:

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

关于swift - 使用 slider 控制 SCNAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49776773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com