- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找解决我的问题的方法:我已经使用 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/
我对 Swift 和 IOS 开发还很陌生,所以这可能是一个简单的问题,但我很难在互联网上找到答案。 我试图通过在其中一个节点上运行 SCNAction 来为静态 DAE 模型制作动画。然而,在 SC
我看到的是SceneKit中的崩溃,这是我在iOS 13.1.2之前没有看到的。 我已将问题追查到以下功能,无法完全推测出导致问题的原因。 如果我注释掉在节点上运行操作的行,一切就很好。 我可以在场景
编辑 我比较了在 iPhone(6+、9.3 (13E5200d))(我的默认设置)和 iOS 模拟器(6+ 9.3 (13E5200d))上运行的结果。模拟器按预期工作。为什么两者之间存在差异? 我
我想放下一个物体,然后将它移回顶部,让它再次落下。第一部分工作正常,但随后节点似乎失去了重力并且不再下落。看起来它的物理 body 停留在地板上并且没有被 SCNActions 移动。解决方案是什么?
即使用户一直触摸激活操作的对象,我如何才能只执行一次操作直到完成?示例:一个按钮在按下时使一个盒子落下 'SCNVector3(0, -1, 0)'。如何让按钮在操作完成之前不再执行操作,即使用户正在
我的 SCNAction 不工作,即使编译器到达那里。这是我创建 SCNAction 的代码: println("log 1") //to check the program gets there l
我有一个节点 (nodeCollection),它有一个 SCNNode 作为子节点,它是这样创建的: let boxGeo = SCNBox(width: 1, height: 1, length:
如何为 SCNAction 结束时编写完成处理程序?或者可能只是在操作结束时收到通知。有什么方法可以知道 Action 何时结束?我最后的办法是使用自定义 delay(delay: Double, c
嘿,我正在尝试弄清楚如何以淡出持续时间结束 scnActions moveto 动作。基本上我有一辆车,汽车移动到现场,但一旦 Action 完成就突然停下来。我希望尝试让汽车更平稳地停下来。但我
NodeA 有一个 SCNAction 运行,持续时间为 10 秒。假设 4 秒过去了。如何获得正在进行的 SCNAction 的剩余持续时间(在本例中为 6 秒)? 我计划使用剩余的持续时间来动态创
我们将崩溃的原因确定为在我们的游戏中使用 SCNAction.playAudio 的声明。如果在我们的游戏中调用了任何 playAudio 语句,则 SCNScene/SCNView 的取消初始化稍后
我正在尝试在场景中移动 SCNNode,并限制为 GKGridGraph。沿着吃 bean 人的思路思考,但在 3D 中。 我有一个 ControlComponent 来处理我的 SCNNode 的移
我正在寻找解决我的问题的方法:我已经使用 Xcode 中的 Action 编辑器将动画定义为 SCNAction。现在我想用 slider 来控制它。因此,基本上操纵 slider 会显示动画中的特定
我在我的 3D 世界中有两个 SCNNodes A 和 B。 A 由用户移动,而 B 具有使其从左向右移动的 Action 。这是对 B 的操作: let moveDirection: Float =
嘿,我有一个球,可以通过施加力来移动。我想让它做的基本上是在它通过空气到达目的地时,重力作用在它身上的因果效应。基本上,当“移动到” Action 正在播放时,重力不会产生影响,所以它不会慢慢落到地面
我有一个聚光灯,用下面的代码创建,在我所有的节点上转换阴影: spotLight.type = SCNLightTypeSpot spotLight.spotInnerAngle = 50.0
我有一个场景,其中有一个应该永远运行旋转 Action 的盒子: dps 是可以由用户更改的属性。 override func viewDidAppear() { super.view
如何在没有 key 的情况下暂停或停止 .runActionForever() 调用的 SCNAction?我看到了使用 node.removeActionForKey("action") 的选项,但
我创建了一个玩家可以在其中移动的 SceneKit 3D 迷宫世界。跳跃等一些 Action 涉及上下移动相机,同时在几秒钟的时间内改变观察方向。在此期间,我想忽略用户的点击和滑动,这些点击和滑动通常
我有一个有约束的节点;更具体地说,它有一个 SCNLookAtConstraint : let constraint = SCNLookAtConstraint(target: scene.r
我是一名优秀的程序员,十分优秀!