新代码
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()
到需要的地方。
声音很清楚它似乎只是让我的产卵墙在发出声音时跳了一下。 我在做什么是错的吗?
答案 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()
})