我看到我应用程序的崩溃日志中有少量SpriteKit playSoundFileNamed崩溃。崩溃发生在iOS 8.3上。
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[NSException initWithCoder:]
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:]
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:]
...
还有一些相关的崩溃:
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[NSException raise:format:]
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:]
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:]
...
有谁知道导致此次崩溃的原因以及如何解决这个问题?我应该将每个调用包装到playSoundFileNamed:在try-catch块中吗?
被修改
更多信息:
我正在使用Swift。试图播放我自己的声音,我看到来自不同声音的崩溃。我也看到了iOS 8.2中的一些报告,因此这次崩溃可能不是特定于iOS 8.3的。
播放声音的线条:
var sound = SKAction.playSoundFileNamed("Sound/ABC.mp3", waitForCompletion: false)
self.runAction(sound)
答案 0 :(得分:2)
我前段时间遇到过类似的问题。问题是变量无法快速播放,因为每次用户点击屏幕时我都会创建变量。尝试在didMoveToView中定义操作,并查看是否仍然遇到问题。 希望有所帮助
答案 1 :(得分:1)
试试这个,让我知道它是否正常工作。
var audioPlayer = AVAudioPlayer()
func playAudio() {
// Set the sound file name & extension
let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("ABC", ofType: "mp3")!)
// Preperation
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
try! AVAudioSession.sharedInstance().setActive(true)
// Play the sound
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print("there is \(error)")
}
}
答案 2 :(得分:0)
我有类似的问题。我的游戏(swift + spritekit)在iOS 8.x上崩溃不确定。但在9.x上完美无缺。一块日志:
2015-12-15 21:27:40.827 MyGame[24055:2285857]
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Resource assets/mfx/my_sound.m4a can not be loaded'
*** First throw call stack:
(
0 CoreFoundation 0x008ae746 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x02598a97 objc_exception_throw + 44
2 CoreFoundation 0x008ae66d +[NSException raise:format:] + 141
3 SpriteKit 0x011ca435 +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:] + 628
4 SpriteKit 0x011601b4 +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:] + 78
5 MyGame 0x0012eb25
解决方案是:仅将所有声音加载一次,作为常量(let)。每次要播放声音时都不要创建变量。
import SpriteKit
import AVFoundation
class Sounds
{
static let SOUND1 = SKAction.playSoundFileNamed("assets/sound1.m4a", waitForCompletion: false)
static let SOUND2 = SKAction.playSoundFileNamed("assets/sound2.m4a", waitForCompletion: false)
}
然后,在某些SKSpriteNode中例如:
func playSound1()
{
self.runAction(Sounds.SOUND1)
}
在此处查找类似/相同的问题:Skaction.playsoundfilenamed crashes when repeat - sprite kit