- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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/
我有一个小游戏需要一些背景音乐。但是我不知道如何做到这一点!我尝试将 SKAudioNode 与这段代码结合使用。 override func didMoveToView(view: SKView)
我发现 SKAction playSoundFileNamed 在 IOS 9 中确实存在内存泄漏: https://forums.developer.apple.com/thread/20014 他
我正在尝试实现 Apple 添加到 SpriteKit 的“3d”音频,但声音似乎根本没有定位,即使戴着耳机也是如此。这是我的相关代码。 播放声音函数: func playTapSound(node:
我似乎找不到很多关于 SKAudioNode 的信息。我如何只播放一次声音?我不想重复这个声音。 我想要完成的是在每次子弹产生时在 spritekit 中播放短激光声。 最佳答案 不幸的是,@Knig
自从我打开 Xcode 项目以来已经一年了,我发现存在一些错误。 现在我的音频代码出现问题。一年前它曾经运行良好,但现在它说“ fatal error :在展开可选值时意外发现 nil” sample
好的,所以应用程序可以很好地加载初始 MenuScene,但是当我想转移到模拟器上的 GameScene 时,游戏崩溃了,它给了我“线程 1:信号 SIGABRT” 通过评论一些东西并查看它是否仍然运
我是 Swift 编码的新手,正在尝试弄清楚如何在触摸节点时制作具有开/关功能的循环音频。我认为实现它的最佳方式是通过 SKAudioNode,但我不确定我在以下代码中做错了什么。当在节点上按下时 -
你好,我试着改变我的 SKAudioNode 的音量,有人知道怎么做吗?我试图找到解决方案,但没有找到......AudioNode 类对我来说似乎很薄。我也无法访问嵌套的 Audio 类以从那里尝试
所以我一直试图让这个音频文件在游戏的所有场景中播放,但它在 MenuScene 之后中断了。我从 GameViewController 调用 MenuScene class GameViewContr
我正在尝试将背景视频和背景音乐添加到我正在创建的游戏中。为此,我创建了一个 SKVideoNode 和一个 SKAudioNode。当我运行游戏时,视频播放正常,但大多数时候音乐不播放。如果未创建 S
我想从 url 下载声音并播放一次: let sound = SKAudioNode(url:URL(string:"http://www.music.helsinki.fi/tmt/opetus/u
我正在使用 SKAudioNode() 在我的游戏中播放背景音乐。我有一个播放/暂停功能,在我插入耳机之前一切正常。根本没有声音,当我调用暂停/播放功能时出现此错误 AVAudioPlayerNode
文档: pause() Creates an action that tells an audio node to pause playback. Declaration class func pau
在确定 SKAction.playSoundFileNamed 不仅存在漏洞和泄漏,而且还专门在 IAP 中断期间造成崩溃后,我正在为我们的游戏试验其他音效选项(这不是 OK,Apple)。我们正在尝
我需要知道 SKAudioNode 何时完成,但使用 SKAction(:completion:) 似乎不起作用: audioNode.run(SKAction.play()) {
我创建了一个 SKSpriteNode 对象,但是创建了多个对象,显示为它们的字符串。来自 SKAudioNode 对象的声音也被复制多次以产生回响效果。 这是下面的代码。当我在 didBegin 回
我知道这很简单,但我就是想不通!我的歌曲在 sceneOne 的背景中播放。然后我切换到场景二,音乐完全停止。如何让背景音乐继续播放?下面是我的代码。 //Music Music = SKAudioN
文档似乎建议在 SKAudioNode 上运行播放会返回 SKAction play() Creates an action that tells an audio node to start pla
这是我第一次使用 SKAudioNode。首先,我在 GameScene 类的顶部声明了一个属性: var backgroundMusic: SKAudioNode! 现在我添加了一个辅助方法: fu
所以我有一个项目在 xcode 8 上运行得很好,但是当我尝试在 xcode 9b2 上运行它时它崩溃了。 我正在创建音频节点: let birdSound = SKAudioNode(fileNam
我是一名优秀的程序员,十分优秀!