听起来不是新课

时间:2014-12-08 19:17:37

标签: ios swift sprite-kit

我是一名经验丰富的程序员,但对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已执行,但没有声音播放。有什么想法吗?

1 个答案:

答案 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子类运行动作。