我是一名经验丰富的程序员,但对iOS和Swift来说是新手。我已经用声音构建了一个教程俄罗斯方块游戏。我正在尝试重构代码并将声音例程移动到指定的类。正在调用新类中的函数,但声音不再播放。
GameScene.swift
import SpriteKit
...
class GameScene: SKScene {
...
runAction(SKAction.repeatActionForever(SKAction.playSoundFileNamed("theme.mp3", waitForCompletion: true)))
}
Sounds.swift
import SpriteKit
class Sounds: SKNode {
required init(coder aDecoder: NSCoder) { fatalError("NSCoder not supported") }
override init() { super.init() }
func playSoundtrack() {
println( "Sounds: playSoundtrack: ")
runAction(SKAction.repeatActionForever(SKAction.playSoundFileNamed("theme.mp3", waitForCompletion: true)))
}
}
如上所述更改了GameScene代码:
class GameScene: SKScene {
var soundEngine: Sounds = Sounds()
...
soundEngine.playSoundtrack()
}
我验证了println已执行,但没有声音播放。有什么想法吗?
答案 0 :(得分:0)
来自Apple的文档
SKAction对象是由中的节点执行的操作 的场景强>
您需要使用
将soundEngine
添加到场景中
self.addChild(soundEngine)
soundEngine.playSoundtrack()
或将场景传递到playSoundtrack
方法并在场景上运行
soundEngine.playSoundtrack(self)
func playSoundtrack(SKScene *scene) {
scene.runAction(SKAction.repeatActionForever(SKAction.playSoundFileNamed("theme.mp3", waitForCompletion: true)))
}
当然,如果你选择后者,最好只从SKScene
子类运行动作。