gpt4 book ai didi

swift - SKAudioNode else/if off/on 大小写

转载 作者:搜寻专家 更新时间:2023-11-01 07:26:23 29 4
gpt4 key购买 nike

我是 Swift 编码的新手,正在尝试弄清楚如何在触摸节点时制作具有开/关功能的循环音频。我认为实现它的最佳方式是通过 SKAudioNode,但我不确定我在以下代码中做错了什么。当在节点上按下时 - SKAudioNode 开始播放,然后在按下以关闭声音后 - 声音不会停止。再次按下时 - 声音会重叠在前一个上。把整个重要的部分放在这里。提前谢谢你。

import SpriteKit
import AVFoundation

我在这里创建一个 bool 值来触发声音是打开还是关闭:

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()
}

}
}

最佳答案

每次按下声音按钮时,您都会创建一个新的 SKAudioNode 实例,这可能会导致声音问题。

走这两行

let playguitar: SKAudioNode
playguitar = SKAudioNode(fileNamed: "guitar.wav")

出于

 func fireTurnsOnOff() {...

比放

  let playguitar: SKAudioNode

在 DidMoveToView 之上作为类/全局属性和

  playguitar = SKAudioNode(fileNamed: "guitar.wav")  

在 didMoveToView 中。

关于swift - SKAudioNode else/if off/on 大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830503/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com