添加SKAudioNode时,应用程序在模拟器中崩溃了吗?

时间:2019-06-13 13:16:11

标签: ios xcode sprite-kit

好,因此应用程序可以正常加载初始MenuScene,但是一旦我想转移到模拟器上的GameScene上,游戏便崩溃了,它给了我“线程1:信号SIGABRT”

通过注释掉某些内容并查看它是否仍然可以运行,我能够确定导致应用程序崩溃的唯一原因是在场景中添加了SKAudioNodes。

我已经在我的实际设备上对其进行了测试,但是效果很好。我的代码有问题吗?还是模拟器有问题?

控制台会打印出很多我无法真正解读的内容。这只是其中的一部分。

  

[aqme] 318:错误-66680查找/初始化AQDefaultDevice   80:无法在设备上设置processVolumeScalar。错误:560947818   [AudioHAL_Client] AudioHardware.cpp:2692:AudioDeviceStop:AudioDeviceStop:没有具有给定ID的设备   AudioHardware.cpp:780:AudioObjectSetPropertyData:AudioObjectSetPropertyData:没有具有给定ID 0的对象

     

libc ++ abi.dylib:以类型为NSException的未捕获异常终止

class GameScene: SKScene, SKPhysicsContactDelegate {
let bg: SKAudioNode = SKAudioNode(fileNamed: "background.mp3")
    let fuse = SKAudioNode(fileNamed: "fuse.wav")


    override func didMove(to view: SKView) {
        if soundIsOn {
            self.addChild(bg)
            self.addChild(fuse)
        }
}

}

编辑: 经过进一步调查,我确定导致错误的代码行是我添加子级“保险丝”的行。

1 个答案:

答案 0 :(得分:0)

我觉得您的音频引擎尚未初始化(您什么也不能做,这一切都在Apple上进行),所以.....

尝试

class GameScene: SKScene, SKPhysicsContactDelegate {
    let bg: SKAudioNode = SKAudioNode(fileNamed: "background.mp3")
    let fuse = SKAudioNode(fileNamed: "fuse.wav")


    override func didMove(to view: SKView) {
        DispatchQueue.main.async{
            [weak self]
            guard let strongSelf = self else {return}
            if soundIsOn {
                strongSelf.addChild(bg)
                strongSelf.addChild(fuse)
            }
        }
    }
}

如果这不起作用,请尝试:

class GameScene: SKScene, SKPhysicsContactDelegate {
    let bg: SKAudioNode = SKAudioNode(fileNamed: "background.mp3")
    let fuse = SKAudioNode(fileNamed: "fuse.wav")


    override func didMove(to view: SKView) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            [weak self]
            guard let strongSelf = self else {return}
            if soundIsOn {
                strongSelf.addChild(bg)
                strongSelf.addChild(fuse)
            }
        }
    }
}

让我知道其中哪一个有效(如果有)。最好,我们希望第一个工作,但如果第二个仅工作,那么我们需要为您找到一个更好的位置来添加音频节点。