SKAction playSoundFileNamed 错误

Posted

技术标签:

【中文标题】SKAction playSoundFileNamed 错误【英文标题】:SKAction playSoundFileNamed ERROR 【发布时间】:2013-11-26 23:04:46 【问题描述】:

我在使用受控的计时器间隔发射大约 80 次激光后出现此错误,因此它每 0.2 秒发射一次。

* 由于未捕获的异常“加载资源失败”而终止应用程序,原因:“无法加载资源 squish.mp3” * 首先抛出调用栈:

这是我用来播放声音和创建激光的代码。 squish.mp3 是一个在对象被销毁时播放的音频文件。任何人都可以帮忙吗? SKAction 不是很适合播放声音吗?

SKAction *sound = [SKAction playSoundFileNamed:@"lazer.mp3" waitForCompletion:NO];
[self runAction:sound];
[self removeActionForKey:@"sound"];
SKSpriteNode *laser = [SKSpriteNode spriteNodeWithImageNamed:@"fire"];

【问题讨论】:

我也遇到了同样的问题。你从这个问题中恢复过来了吗? 嗨,是的,我用另一个声音文件替换了声音文件,它似乎修复了它。它现在每 3 秒发射一次(激光声),即使在 1000 次射击后我也没有设法让它崩溃。没有测试过去。 @Banshi 【参考方案1】:

我遇到了同样的问题,我想我有一个解决方案,但我不确定。不过,我已经有一段时间没有看到同样的崩溃了。

制作一个代表播放激光声的SKAction,然后重复使用该对象。

我认为playSoundFileNamed: 应该很聪明,不会在每次使用时都从文件系统重新加载音频文件。但是崩溃表明它确实会重新加载,至少偶尔会重新加载。保留一个 SKAction 以重复使用意味着音频文件只加载一次。

【讨论】:

没有试过,没用。不过谢谢你的建议。我读了另一篇评论说只使用 CGAudio 所以也许我会这样做。 抱歉没用。它似乎对我有所帮助。在我看来,音频在 SpriteKit 中更像是事后才想到的。【参考方案2】:

不知道为什么我没有尝试这个,但我只是替换了声音文件,它似乎已经治愈了。但是,如果音频文件出现错误,为什么它在崩溃前播放了大约 200 次。

【讨论】:

如果你不断调用 runAction(SKAction.playSoundFileNamed("file.wav")) 你还是会遇到问题 你应该看看解决方案here 我也面临同样的问题..!声音文件运行持续超过 100 次,然后崩溃并丢失错误!【参考方案3】:

我会为声音文件使用更兼容 Apple 的格式,例如 AAC (.m4a)。苹果对.mp3s 不太友好。但是,我认为该文件可以是 Microsoft .wav 文件

【讨论】:

以上是关于SKAction playSoundFileNamed 错误的主要内容,如果未能解决你的问题,请参考以下文章

SKAction playSoundFileNamed 错误

SKAction playSoundFileNamed 没有声音通过 iphone 扬声器

从 SKAction 播放音乐

在 Spritekit Swift 中停止音频

使用导致内存泄漏的音频片段

开始一个节点暂停的场景