【问题标题】:Music Stops playing after scene change SKAudioNode Xcode 8场景更改后音乐停止播放SKAudioNode Xcode 8
【发布时间】:2017-02-13 16:01:16
【问题描述】:

所以我一直试图让这个音频文件在游戏的所有场景中播放,但在 MenuScene 之后它就中断了。我从GameViewController 拨打MenuScene

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'MenuScene.sks'
        if let scene = SKScene(fileNamed: "MenuScene") {
            // Set the scale mode to scale to fit the window

然后在 MenuScene 中,我通过这样做开始音乐。

class MenuScene: SKScene {

var starfield:SKEmitterNode!

var newGameButtonNode:SKSpriteNode!
var difficultyButtonNode:SKSpriteNode!
var difficultyLabelNode:SKLabelNode!
var backgroundMusic:SKAudioNode!

override func didMove(to view: SKView) {


    let backgroundMusic = SKAudioNode(fileNamed: "Snap.mp3")
    backgroundMusic.autoplayLooped = true
    addChild(backgroundMusic)

音乐开始播放。然后我在touchesBegan () 中,如果触摸 GameScene 按钮,它将加载该场景。我做了很长时间的过渡,以找出音乐何时停止并且它在整个过渡中播放,但是当GameScene 加载时它停止了。

if nodesArray.first?.name == "newGameButton" {

            let transition = SKTransition.fade(withDuration: 5.0)

            run(SKAction.wait(forDuration: 5.0), completion: {
                self.backgroundMusic = SKAudioNode(fileNamed: "Snap.mp3")
                self.backgroundMusic.autoplayLooped = true
                self.addChild(self.backgroundMusic)
            })
            let gameScene = GameScene(size: self.size)

            self.view!.presentScene(gameScene, transition: transition)

我希望它在整个游戏和 GameOver 场景中继续播放并永远循环播放。

【问题讨论】:

    标签: ios xcode sprite-kit


    【解决方案1】:

    确保您在主 SKScene 和

    你可以这样做:

    self.runAction(SKAction.playSoundFileNamed("YourFileName.extension", waitForCompletion: false))
    

    重复音乐:

    SKAction.repeatForever(SKAction.playSoundFileNamed("YourFileName.extension", waitForCompletion: true))
    

    您的音乐将继续播放..

    使用 AVFoundation

    我已经完成了我的一个代码。

    import AVFoundation
    
    
    var backgroundMusicPlayer: AVAudioPlayer!
    
    func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(
    filename, withExtension: nil)
    if (url == nil) {
    print("Could not find file: \(filename)")
    return
    }
    
    var error: NSError? = nil
    backgroundMusicPlayer = 
    AVAudioPlayer(contentsOfURL: url, error: &error)
    if backgroundMusicPlayer == nil {
    print("Could not create audio player: \(error!)")
    return
    }
    
    backgroundMusicPlayer.numberOfLoops = -1
    backgroundMusicPlayer.prepareToPlay()
    backgroundMusicPlayer.play()
     }
    
      import SpriteKit
    

    【讨论】:

    • 我将如何让它重复,我确实尝试过这个,它会在每个场景中播放,但只播放一次。
    • 我确实把你添加的那行放在它下面,歌曲没有重复。我觉得这是因为我的 MenuScene 仅在游戏开始时被调用,但 GameScene 和 GameOverScene 在按下相关按钮时相互调用。如何让它在 MenuScene 中播放并在 GameScene 和 GameOverScenes 中重复播放?
    • 尝试将第一行代码放在 MenuScene 中,然后在 GameScene 和 GameOverScene 中放入第二行代码。如果可行,请告诉我。
    • 它仍然没有重复
    • 我会接受你的回答我做了一些稍微不同的事情来解决我的问题,但你的代码确实有助于弄清楚如何解决问题。我可以将我所做的添加到您的答案中以帮助我弄清楚吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多