首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SKAudioNode初始化fileNamed返回零

使用SKAudioNode初始化fileNamed返回零
EN

Stack Overflow用户
提问于 2016-04-09 15:16:52
回答 4查看 1.5K关注 0票数 5

这是我第一次使用SKAudioNode。首先,我在GameScene类的顶部声明了一个属性:

代码语言:javascript
复制
var backgroundMusic: SKAudioNode!

现在,我添加了一个助手方法:

代码语言:javascript
复制
func playBackgroundMusic(name: String) {
    if backgroundMusic != nil {
        backgroundMusic.removeFromParent()
    }

    backgroundMusic = SKAudioNode(fileNamed: name)
    backgroundMusic.autoplayLooped = true
    addChild(backgroundMusic)
}

现在我这样调用这个方法:

代码语言:javascript
复制
playBackgroundMusic("ABC.caf")

它在这一行中抛出一个致命错误:

代码语言:javascript
复制
backgroundMusic.autoplayLooped = true

说明:在展开可选值时,意外发现为零。

我确实确保了

  • ABC.caf在我的项目中,并在复制包资源中列出。
  • 拼写正确。

现在我还应该在哪里检查错误呢?

编辑:

以下是我的配置信息:

  • Xcode 7.3
  • iPhone与iOS 9.3.2
  • 基于iOS 9.3的模拟器

设备和模拟器都不能工作。

EDIT2:

我修改了代码如下:

代码语言:javascript
复制
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.在我最后一次编辑这个问题的几分钟后,我试着用这样的方法将所有内容替换为:

代码语言:javascript
复制
runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false))

还是没有声音。也许声音文件有问题?

EN

回答 4

Stack Overflow用户

发布于 2016-04-14 22:39:34

我刚碰到这个问题。显然,它现在只适用于局部变量。下面的代码有效。

代码语言:javascript
复制
var background:SKAudioNode!

override func didMoveToView(view: SKView) {
    let bg = SKAudioNode(fileNamed: "bg.mp3")
    addChild(bg)
    background = bg
}
票数 13
EN

Stack Overflow用户

发布于 2016-04-11 10:20:31

我用上面EDIT2中的代码解决了这个问题:

代码语言:javascript
复制
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上的侧开关不是红色的。

票数 2
EN

Stack Overflow用户

发布于 2019-07-06 08:38:31

我对SKAudioNode(fileNamed:)也有类似的问题,从自动完成和我遇到的问题来看,有两个不同的初始化器具有相同的参数签名,一个是返回SKAudioNode,另一个是返回SKNode,而我不知怎么搞错了。我转而使用SKAudioNode(url:) (使用Bundle.main.url(forResource:withExtension:)获取URL ),一切都如愿以偿。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36518725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档