2015-12-23 4 views
1

Я использую следующий код для воспроизведения музыки на моем меню SKScene:Остановки Audio In Spritekit Swift

Под SKScene Объявляет музыку действие:

class MENU: SKScene { 
let action: SKAction = SKAction.playSoundFileNamed("gameMusic.wav", waitForCompletion: false) 

И касания начал метод, я воспроизводите мой звук при нажатии кнопки.

self.runAction(action, withKey:"stopIce") 

И под моим didMoveToView: У меня есть следующий код, чтобы остановить музыку, когда меню сюжетных нагрузки.

self.removeActionForKey("stopIce") 

Когда я касаюсь кнопки в МЕНЮ SkScene и перехожу на сцену уровня, музыка играет отлично. Однако, когда я перехожу обратно в МЕНЮ Сцена, где была кнопка, код не останавливает музыку?

self.removeActionForKey("stopIce") 

Я хочу, чтобы остановить все звуки, когда вы вернетесь в меню сцены, так что, если игрок нажимает кнопку, чтобы снова идти на уровне SKScene, музыка не имеет 2 трека, играя в то же время. Спасибо :)

ответ

5

Если вы можете настроить таргетинг на iOS 9, есть замечательное решение для этого: SKAudioNode. Он позволяет воспроизводить музыку и останавливать ее, когда вы хотите, плюс она автоматически петли, когда она привязана к узлу.

Чтобы попробовать его, сделать свойство как это:

var backgroundMusic: SKAudioNode! 

Затем добавьте в didMoveToView():

backgroundMusic = SKAudioNode(fileNamed: "music.m4a") 
addChild(backgroundMusic) 

Это все, что нужно, чтобы начать играть! Если вы хотите, чтобы это остановить, используйте:

backgroundMusic.runAction(SKAction.stop()) 
2

аудио будет продолжать играть до тех пор, пока не будет закончена, я верю, так что вам нужно сделать, это приостановить SKNode, что он включен. Если SKNode - это спрайт, который вы не хотите приостанавливать, просто добавьте дочерний дочерний элемент в спрайт, который предназначен для воспроизведения звука, и приостановите дочерний узел