SKAudioNode else/ если выключен / включен Case
Я новичок в кодировании Swift и пытаюсь понять, как сделать зацикленное аудио с функцией включения / выключения, касаясь узла. Я подумал, что лучший способ реализовать это через SKAudioNode, но я не уверен, что я делаю неправильно в следующем коде. При нажатии на узле - SKAudioNode начинает играть, а затем, после нажатия, чтобы выключить звук - звук не останавливается. При нажатии в другой раз - звук перекрывает предыдущий. Положить здесь всю существенную часть. Заранее спасибо.
import SpriteKit
import AVFoundation
Я создаю здесь логическое значение для запуска, если звук включен или выключен:
var firesoundon = false
Настройка сцены следующая.
class GameScene2: SKScene {
override func didMoveToView(view: SKView) {
setUpScenery()
}
private func setUpScenery() {
//BACKGROUND
let background = SKSpriteNode(imageNamed: backgroundImage, normalMapped: true)
background.anchorPoint = CGPointMake(0, 0)
background.position = CGPointMake(0, 0)
background.zPosition = Layer.ZBackground
background.size = CGSize(width: self.view!.bounds.size.width, height: self.view!.bounds.size.height)
background.lightingBitMask = 1;
addChild(background)
//FIRE
let fireLayerTexture = SKTexture(imageNamed: fireImage)
let fireLayer = SKSpriteNode(texture: fireLayerTexture)
fireLayer.anchorPoint = CGPointMake(1, 0)
fireLayer.position = CGPointMake(size.width, 0)
fireLayer.zPosition = Layer.Z4st
addChild(fireLayer)
let firePath = UIBezierPath()
firePath.moveToPoint(CGPointMake(0, 0))
firePath.addCurveToPoint(CGPointMake(115, 215), controlPoint1: CGPointMake(5, 170), controlPoint2: CGPointMake(90, 190))
firePath.addCurveToPoint(CGPointMake(150, 260), controlPoint1: CGPointMake(115, 215), controlPoint2: CGPointMake(120, 295)) //curve1
firePath.addCurveToPoint(CGPointMake(180, 280), controlPoint1: CGPointMake(150, 260), controlPoint2: CGPointMake(155, 350)) //curve2
firePath.addCurveToPoint(CGPointMake(225, 280), controlPoint1: CGPointMake(180, 280), controlPoint2: CGPointMake(210, 395)) //curve3
firePath.addCurveToPoint(CGPointMake(250, 260), controlPoint1: CGPointMake(230, 280), controlPoint2: CGPointMake(245, 290)) //curve4
firePath.addCurveToPoint(CGPointMake(290, 220), controlPoint1: CGPointMake(250, 260), controlPoint2: CGPointMake(280, 270)) //curve5
firePath.addLineToPoint(CGPointMake(380, 200))
firePath.addLineToPoint(CGPointMake(380, 0))
firePath.addLineToPoint(CGPointMake(0, 0))
let fireNode = SKShapeNode(path: firePath.CGPath, centered: false)
fireNode.alpha = 0.2
fireNode.zPosition = Layer.Z4st+1
fireNode.lineWidth = 2
fireNode.strokeColor = SKColor.whiteColor()
fireNode.fillColor = SKColor.blueColor()
fireNode.position = CGPointMake(size.width/2, 0)
fireNode.name = "fireNode"
self.addChild(fireNode)
Создание функции включения / выключения огня:
func fireTurnsOnOff () {
let playguitar: SKAudioNode
playguitar = SKAudioNode(fileNamed: "guitar.wav")
if firesoundon == false {
addChild(playguitar)
firesoundon = true
print("firesoundon is == \(firesoundon)")
}
else if firesoundon == true {
let stopguitar = SKAction.stop()
playguitar.runAction(stopguitar)
print("GuiterStopped")
firesoundon = false
print("firesoundon is == \(firesoundon)")
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let touchLocation = touch.locationInNode(self)
let node: SKNode = nodeAtPoint(touchLocation)
if node.name == "fireNode" {
fireTurnsOnOff()
}
}
}
1 ответ
Каждый раз, когда вы нажимаете кнопку звука, вы создаете новый экземпляр SKAudioNode, который, вероятно, вызывает проблемы со звуком.
Возьмите тезисы в две строки
let playguitar: SKAudioNode
playguitar = SKAudioNode(fileNamed: "guitar.wav")
снаружи
func fireTurnsOnOff() {...
Чем поставить
let playguitar: SKAudioNode
выше DidMoveToView как класс / глобальное свойство и
playguitar = SKAudioNode(fileNamed: "guitar.wav")
внутри didMoveToView.