这是我第一次使用SKAudioNode。首先,我在GameScene类的顶部声明了一个属性:
var backgroundMusic: SKAudioNode!现在,我添加了一个助手方法:
func playBackgroundMusic(name: String) {
if backgroundMusic != nil {
backgroundMusic.removeFromParent()
}
backgroundMusic = SKAudioNode(fileNamed: name)
backgroundMusic.autoplayLooped = true
addChild(backgroundMusic)
}现在我这样调用这个方法:
playBackgroundMusic("ABC.caf")它在这一行中抛出一个致命错误:
backgroundMusic.autoplayLooped = true说明:在展开可选值时,意外发现为零。
我确实确保了
现在我还应该在哪里检查错误呢?
编辑:
以下是我的配置信息:
设备和模拟器都不能工作。
EDIT2:
我修改了代码如下:
func playBackgroundMusic(name: String) {
if backgroundMusic != nil {
backgroundMusic.removeFromParent()
}
let temp = SKAudioNode(fileNamed: name)
temp.autoplayLooped = true
backgroundMusic = temp
//backgroundMusic = SKAudioNode(fileNamed: "SpaceGame.caf")
//backgroundMusic.autoplayLooped = true
addChild(backgroundMusic)
}现在,我的应用程序不再崩溃,但它没有声音。有什么想法吗?
P.S.在我最后一次编辑这个问题的几分钟后,我试着用这样的方法将所有内容替换为:
runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false))还是没有声音。也许声音文件有问题?
发布于 2016-04-14 22:39:34
我刚碰到这个问题。显然,它现在只适用于局部变量。下面的代码有效。
var background:SKAudioNode!
override func didMoveToView(view: SKView) {
let bg = SKAudioNode(fileNamed: "bg.mp3")
addChild(bg)
background = bg
}发布于 2016-04-11 10:20:31
我用上面EDIT2中的代码解决了这个问题:
func playBackgroundMusic(name: String) {
if backgroundMusic != nil {
backgroundMusic.removeFromParent()
}
let temp = SKAudioNode(fileNamed: name)
temp.autoplayLooped = true
backgroundMusic = temp
//backgroundMusic = SKAudioNode(fileNamed: "SpaceGame.caf")
//backgroundMusic.autoplayLooped = true
//addChild(backgroundMusic)
runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false))
}对于没有声音的部分,只需确保您的iPhone上的侧开关不是红色的。
发布于 2019-07-06 08:38:31
我对SKAudioNode(fileNamed:)也有类似的问题,从自动完成和我遇到的问题来看,有两个不同的初始化器具有相同的参数签名,一个是返回SKAudioNode,另一个是返回SKNode,而我不知怎么搞错了。我转而使用SKAudioNode(url:) (使用Bundle.main.url(forResource:withExtension:)获取URL ),一切都如愿以偿。
https://stackoverflow.com/questions/36518725
复制相似问题