在 swift sprite kit 游戏中导致游戏延迟的声音?
Sound causing game to lag in swift sprite kit game?
新代码
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()
到需要的地方。
声音很清晰,只是在发出声音时似乎让我的生成墙跳了一点。
我做错了什么吗?
由于没有预加载声音文件,您出现了延迟。您可以在应用程序启动时预加载它们,然后在需要时播放它们。作为参考查看此
如果您仍然遇到同样的问题,那么您可以在后台队列中添加声音,如图所示here
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
audioPlayer.play()
})
新代码
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()
到需要的地方。
声音很清晰,只是在发出声音时似乎让我的生成墙跳了一点。 我做错了什么吗?
由于没有预加载声音文件,您出现了延迟。您可以在应用程序启动时预加载它们,然后在需要时播放它们。作为参考查看此
如果您仍然遇到同样的问题,那么您可以在后台队列中添加声音,如图所示here
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
audioPlayer.play()
})