好,因此应用程序可以正常加载初始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)
}
}
}
编辑: 经过进一步调查,我确定导致错误的代码行是我添加子级“保险丝”的行。
答案 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)
}
}
}
}
让我知道其中哪一个有效(如果有)。最好,我们希望第一个工作,但如果第二个仅工作,那么我们需要为您找到一个更好的位置来添加音频节点。