- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们将崩溃的原因确定为在我们的游戏中使用 SCNAction.playAudio
的声明。如果在我们的游戏中调用了任何 playAudio
语句,则 SCNScene/SCNView 的取消初始化稍后会随机触发此崩溃:
我们如何播放音频:
func playAudioSource(from node: SCNNode, source audioSource: SCNAudioSource) {
node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false))
}
它显示 EXC_BAD_ACCESS
位于 CPP3DAudioEngine::RemoveContext
。我们正在使用 SceneKit 和 Swift 3 为 iOS 10.3 开发。
最佳答案
您应该提供更多代码以更好地了解您的游戏中发生的事情,但您肯定可以通过以下方式更正您的功能:
func playAudioSource(from node: SCNNode, source audioSource: SCNAudioSource) {
if let _ = node.parent, node.action(forKey: "playAudio") == nil {
node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false),forKey:"playAudio")
}
}
这可以防止在操作已经启动或正在执行时启动操作,并检查您的节点是否已经附加到它的父节点(这可能很有用,它取决于您从何处启动此代码..)
关于ios - SCNAction.playAudio 在节点取消初始化时导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395236/
我对 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
我是一名优秀的程序员,十分优秀!