Я создаю игру, в которой пользователь управляет персонажем с помощью реактивного пакета. Когда реактивный пакет пересекает алмаз, я добавляю алмаз к их сумме, а затем воспроизвожу звук. Тем не менее, звук делает паузу игры на десятую часть секунды или около того и нарушает поток. Это код, я использую:Игра, когда проигрывается AVAudioPlayer
var diamondSound = NSBundle.mainBundle().URLForResource("diamondCollect", withExtension: "wav")!
var diamondPlayer = AVAudioPlayer?()
class GameScene: SKScene{
override func didMoveToView(view: SKView) {
do {
diamondPlayer = try AVAudioPlayer(contentsOfURL: diamondSound)
guard let player = diamondPlayer else { return }
player.prepareToPlay()
} catch let error as NSError {
print(error.description)
}
}
А потом:
override func update(currentTime: CFTimeInterval) {
if character.intersectsNode(diamond){
diamondPlayer?.play()
addDiamond()
diamond.removeFromParent()
}
}
Также я использую Sprite Kit, если это имеет значение. Любая помощь очень ценится!
Я бы попробовать и использовать '' SKAudioNode' или SKAction.playSoundWithFileNamed' первым, так как они построены, чтобы быть используется с SpriteKit. Кроме того, вам не нужен защитник, так как вы делаете попытку поймать, я бы удалил его. если из AVAudioPlayer возвращается nil, он загорится уловом – Knight0fDragon
Проблема, которую я вижу, может быть, вы несколько раз стреляете в игру, добавьте чек, чтобы играть только один раз, у AVAudioPlayer есть 'играющий логин, вы можете проверить – Knight0fDragon
Просто потому, что вы удаляете алмаз от родителя, не означает, что алмаз мертв, ваш intersectsNode будет проходить, даже если алмаз не находится на сцене. – Knight0fDragon