【问题标题】:Skaction.playsoundfilenamed crashes when repeat - sprite kitSkaction.playsoundfilenamed 重复时崩溃 - sprite kit
【发布时间】:2014-12-28 06:36:20
【问题描述】:

我对精灵套件 SKAction.playSoundFileNamed 有疑问。 实际上,在正确播放一段时间后,应用程序崩溃说它不会加载。 该文件包含在包导入中,项目文件存在并且一切都已正确设置。

唯一的问题,玩了一段时间后,我会崩溃说找不到文件,或者至少无法加载。

我的问题是,有没有办法在每次播放 SKAction.playSoundFileNamed 的时候进行充电?

编辑 - 已解决

//init
var sound = SKAction.playSoundFileNamed("sound.mp3", waitForCompletion: false)
var sound2 = SKAction.playSoundFileNamed("sound2.mp3", waitForCompletion: false) 

//in the code call function when play sound:
playSound(sound)

...

func playSound(soundVariable : SKAction)
{
    runAction(soundVariable)   
}

实例化的预加载声音不再产生崩溃

【问题讨论】:

  • 这已经被问过几次了,我相信没有解决方案。我的假设是这可能是一个错误。 playsound 动作也是一个拐杖,必须有一些简单的方法来播放声音。如果您想要任何合理的音频播放,请使用 AVAudioPlayer 或更好的声音引擎,如 ObjectAL。
  • AVAudioPlayer 与声音在下一部分时停止,但即使它们重叠,我也需要以整个声音再现。解决方案?

标签: ios swift sprite-kit skaction


【解决方案1】:

前置声音变量

//init
var sound = SKAction.playSoundFileNamed("sound.mp3", waitForCompletion: false)
var sound2 = SKAction.playSoundFileNamed("sound2.mp3", waitForCompletion: false) 

//in the code call function when play sound:
playSound(sound)

...

func playSound(soundVariable : SKAction)
{
    runAction(soundVariable)   
}

【讨论】:

  • 我遇到了同样的问题,然后尝试强制网络所以我解决了。我向你保证它可以工作并且不会崩溃。感谢下一个
  • 虽然这种崩溃的频率较低,但您仍然会偶尔遇到崩溃。这是苹果的一个问题,此解决方案大大降低了崩溃的频率并将其限制为应用程序启动(假设那是您预加载操作的时间)。
  • 我没有减少错误的频率。我把它取下来了。使用此解决方案(并在其他应用程序中使用)我没有任何问题。虽然我确信有了 swift 2 和更多的开源,这方面也会有很多改进
  • 天哪,你是我的英雄!你救了我的游戏哈哈哈 :) 感谢声音像地狱一样窃听!!!!你应该得到更多的支持。
【解决方案2】:

我有一个 SKNode 类型的小助手类来播放音频文件。 注意:必须将 Helper 对象添加到 SKScene 层次结构中才能播放音频。

import UIKit

enum SFX_TYPE:Int
{
    case NEW_LEVEL = 0
    case BANG = 1
}

let SFXContainer:[SFX_TYPE:[SKAction]] = [
    SFX_TYPE.NEW_LEVEL : [SKAction.playSoundFileNamed("newlevel.m4a", waitForCompletion: true)],
    SFX_TYPE.BANG : [
        SKAction.playSoundFileNamed("explosion1.m4a", waitForCompletion: true),
        SKAction.playSoundFileNamed("explosion2.m4a", waitForCompletion: true),
        SKAction.playSoundFileNamed("explosion3.m4a", waitForCompletion: true),
        SKAction.playSoundFileNamed("explosion4.m4a", waitForCompletion: true)
    ]
]

class SabilandSound: SKNode {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    deinit
    {
        Helper.masterObserverRemove(self)
    }

    override init()
    {
        super.init()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("masterPlaySFX:"), name: NCNPlaySFX, object: nil)
    }

    func masterPlaySFX(n:NSNotification)
    {
        let st = SFX_TYPE(rawValue: n.userInfo![NCNPlaySFX] as! Int)!
        let c = SFXContainer[st]!
        let a = SFXContainer[st]![Helper.randomBetween(0, max: c.count, includeMax: false)]
        runAction(a)
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多