声音导致游戏在快速精灵套装游戏中落后?

时间:2016-12-16 09:04:31

标签: swift avfoundation avaudioplayer

新代码

class SceneTwo: SKScene, SKPhysicsContactDelegate {

   let flap = SKAction.playSoundFileNamed("flap.caf", waitForCompletion: false)

   let whack = SKAction.playSoundFileNamed("whack.caf", waitForCompletion: false)

   let tap = SKAction.playSoundFileNamed("tap.caf", waitForCompletion: false)

然后我就放了

运行(抽头) 跑(皮瓣)等 必要时..

嗨,我想知道我是否正在使用正确的编码来播放游戏中的声音。在某些情况下,我的游戏类似于Flappy bird。每次触摸屏幕时(当鸟有冲动向上时)播放一个声音,第二个声音是当鸟在每个墙壁之间收集硬币时。

我注意到这两种声音都导致我的游戏滞后。

以下是我对游戏的相对声音代码。

import AVFoundation   

   var flap: AVAudioPlayer?

   var tap: AVAudioPlayer?

override func didMove(to view: SKView) {
    tap?.prepareToPlay()


    flap?.prepareToPlay()


func playFlap() {
    let url = Bundle.main.url(forResource: "flap", withExtension: "caf")!

    do {
        flap = try AVAudioPlayer(contentsOf: url)
        guard let flap = flap else { return }


        flap.play()
    } catch let error {
        print(error.localizedDescription)
    }
}


func playTap() {
    let url = Bundle.main.url(forResource: "tap", withExtension: "caf")!

    do {
        tap = try AVAudioPlayer(contentsOf: url)
        guard let tap = tap else { return }


        tap.play()
    } catch let error {
        print(error.localizedDescription)
    }
}

在此之后我只是

playTap()
playFlap()

到需要的地方。

声音很清楚它似乎只是让我的产卵墙在发出声音时跳了一下。 我在做什么是错的吗?

1 个答案:

答案 0 :(得分:1)

由于您没有预加载声音文件,因此会出现滞后现象。您可以在App Launch上预加载它们,然后在需要时播放它们。有关参考,请参阅此stackoverflow's post

如果你仍然面临同样的问题,那么你可以在后台队列中添加声音,如同here

let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
    audioPlayer.play()
})