SKAction播放音频文件错误。

4

在使用定时器间隔控制激光每0.2秒发射约80次后,我遇到了以下错误:

* Terminating app due to uncaught exception 'Failed to Load Resource', reason: 'Resource squish.mp3 can not be loaded' * First throw call stack:

这是我用来播放声音和创建激光的代码。当对象被摧毁时,会播放名为squish.mp3的音频文件。有没有人能帮忙?SKAction是否不适合用于播放声音?

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

我也遇到了同样的问题。你解决这个问题了吗? - Banshi
嗨,是的,我用另一个声音文件替换了它,似乎解决了问题。现在每隔三分之一秒就会发射(激光声),即使射击1000次后,我也没有成功地让它崩溃。还没有测试过更多。@Banshi - Mixstah
3个回答

2

我不确定为什么没有尝试这样做,但是我刚刚替换了声音文件,似乎解决了问题。然而,如果音频文件存在错误,为什么在崩溃之前播放了大约200次。


如果您不断调用runAction(SKAction.playSoundFileNamed("file.wav"))仍然会遇到问题。您应该查看此处的解决方案。 - Daniel K
我也遇到了同样的问题..!声音文件运行了100多次,然后崩溃并出现丢失错误! - Raksha Saini

2
我曾经遇到同样的问题,但我认为我有解决方案,尽管我不确定。不过我已经有一段时间没有看到同样的崩溃了。
创建一个单一的SKAction来表示播放激光声音,并重复使用该对象。
我认为playSoundFileNamed:应该很聪明,不会每次从文件系统重新加载音频文件。但是崩溃表明它确实被重新加载,至少偶尔会发生。保留一个可重用的SKAction意味着音频文件只会加载一次。

没有,我试过了,不起作用。不过还是谢谢你的建议。我看到另一篇评论说只需使用CGAudio,也许我会这样做。 - Mixstah
抱歉,那个似乎没起作用。它似乎对我有所帮助。在SpriteKit中,音频似乎更像是一个事后补救的东西。 - Fabian

0

我会使用更适合苹果设备的格式,比如 AAC(.m4a)来存储音频文件。苹果设备对于 .mp3 格式并不太友好。不过,我认为这个文件也可以是微软的 .wav 文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接