2017-04-13 6 views
5

私たちのゲームでSCNAction.playAudioを使用するという声明にクラッシュの原因を突き止めました。任意のplayAudio文は私たちのゲームで呼び出される場合は、SCNScene/SCNViewの初期化解除は後にランダムにこのクラッシュの引き金となりますノードが初期化解除されると、SCNAction.playAudioがクラッシュする

私たちは、オーディオを再生する方法

enter image description here

func playAudioSource(from node: SCNNode, source audioSource: SCNAudioSource) { 
    node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false)) 
} 

それはEXC_BAD_ACCESSを示し現在はCPP3DAudioEngine::RemoveContextです。私たちは、あなたがより良いあなたのゲームで起こるかを理解するために多くのコードを提供する必要があります。3.

+0

ゾンビオブジェクトを有効にしてみてください。これにより、初期化されていないオブジェクトの特定が容易になります。 –

+0

ゾンビオブジェクト、mallocログはすべて問題を指摘できませんでした – mauris

+0

うーん...私は問題が何であるか分かりません。ランダムにクラッシュすると言います。これは、オーディオを再生した後に設定された時間ですか? –

答えて

4

SceneKitとスウィフトを使用して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") 
    } 
} 

これは打ち上げを防ぎますアクションがすでに起動または実行されていて、ノードが既に親ノードに接続されているかどうかをチェックします(このコードはどこから起動するかによって異なります)

+0

は修正されません。シーンのrootNodeまたはシーン内の特定のノードでオーディオを再生します。ほとんどが非位位である。 CPP3DAudioEngineがコンテキストを削除しようとしているようですが、すでに削除されています。 – mauris

+2

具体的な状況でのみCPP3DAudioEngine removeContextを使用するため、このplayAudioSourceを起動する部分のコードを特に追加してください。 –

+0

シナリオは同じです:ゲームロジックが1つのサウンドを再生します( 'playAudioSource'を1回実行します) 'SCNScene'がロードされた後のシーンのルートノード上にあります。音は1秒未満です。その後、約15秒後に、私はゲームとviewcontrollerと一緒にすべてを取得し、deinit取得します。非常に短い瞬間に 'EXC_BAD_ACCESS'がスローされます – mauris

関連する問題