我正在尝试使Sprite Kit快速静音和取消静音。我可以使背景音乐静音,但是不能取消静音。这是一些代码供参考:
var backgroundMusicPlayer = AVAudioPlayer()
var speaker = SKSpriteNode(imageNamed: "speaker")
var nospeaker = SKSpriteNode (imageNamed: "nospeaker")
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == self.speaker{
backgroundMusicPlayer.pause()
self.nospeaker.anchorPoint = CGPointMake(0, 0.5)
self.nospeaker.position = CGPointMake(CGRectGetMinX(self.frame) + self.speaker.size.width / 3, CGRectGetMaxY(self.frame) - self.speaker.size.height * 4)
self.addChild(nospeaker)
}
if self.nodeAtPoint(location) == self.nospeaker{
backgroundMusicPlayer.play()
}
}
}
如果有人可以帮助我实现这一目标,将不胜感激。以某种方式,我想触摸扬声器位置,将扬声器节点替换为nospeaker节点,然后暂停AVAudioPlayer。如果再次触摸该位置,则需要还原到扬声器节点并播放AVAudioPlayer。
昨晚添加音乐时,我才在游戏中这么做。
您所要做的就是拥有一个标志变量,该变量知道音乐是否正在播放。我做了一个布尔变量,称为静音。因为没有音乐,所以当我的游戏开始时,mutant等于true。这是我在用户触摸按钮时所拥有的代码。
//I don't want music playing when the game starts
var mute: Bool = true
//Mute Button (music automatically is off)
if muteButton.containsPoint(touchLocation) {
if mute {
//This runs if the user wants music
println("The button will now turn on music.")
mute = false
backgroundMusicPlayer.play()
} else {
//This happens when the user doesn't want music
println("the button will now turn off music.")
mute = true
backgroundMusicPlayer.pause()
}
}
我唯一遇到的问题是,将SKSPriteNode音量按钮更改为静音按钮时,它将不起作用。我不知道为什么 因此,我制作了一个单独的SKSpriteNode,它是一个红色x,用于在音乐暂停时显示。
基本上,它所做的就是检查音乐是否已经静音。如果是的话,它将取消静音并播放(这将使静音= false)。如果再次按下它,它会检查它是否未静音,因此它将打开音乐(静音= true)。
对于xCode 7.0 Swift 2.0编辑2015年9月19日
对于xCode 7和Swift 2,这应该是您的代码,除非您没有收到我所做的错误或已将其修复。
var backgroundMusicPlayer: AVAudioPlayer?
override func touchesBegan(touches: Set<UITouch>?, withEvent event: UIEvent!)
for touch: AnyObject in touches! {
backgroundMusicPlayer!.pause()
backgroundMusicPlayer!.play()
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句