繁体   English   中英

节点取消初始化时,SCNAction.playAudio导致崩溃

[英]SCNAction.playAudio causes crash when nodes get deinitialized

我们将崩溃的原因确定为在游戏中使用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")
    }
}

这样可以防止在动作已启动或正在执行时启动该动作,并检查您的节点是否已附加到其父节点(这很有用,取决于您从何处启动该代码。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM