我们在游戏中使用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。
答案 0 :(得分:5)
您应该提供更多代码,以便更好地了解游戏中发生的情况,但您肯定可以通过以下方式纠正您的功能:
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")
}
}
这可以防止在已经启动或执行的操作时启动操作,并检查您的节点是否已经连接到它的父节点(这可能很有用,它取决于您的位置)启动此代码..)