完全删除SKSpriteNode变量

时间:2016-04-14 11:42:30

标签: swift skspritenode

我有一个SKSpriteNode的子类叫做' backgroundMusic'由SKSpriteNode和AVAudioPlayer文件组成。目标是完全删除背景音乐'在我实例化之后。我试着这样做:

backgroundMusic.removeFromParent()

但它只删除了SKSpriteNode而不是AVAudioPlayer。

主要问题是在这个子类中,我在其他函数中调用了一堆函数,当我尝试通过以下方式清空子类时:

backgroundMusic = nil

调用所有函数的过程仍在发生,并在重新实例化时导致问题。我认为可行的是,如果我删除了背景音乐'完全,这将停止函数调用进程,然后在我需要时重新实例化它,它应该正常工作没有问题。我怎么能这样做?

编辑我试过了:

self.delete(backgroundMusic)

它崩溃了应用程序。我应该用这个吗?如果是这样的话?

1 个答案:

答案 0 :(得分:0)

这是因为你没有配置Audio Session

一些播放代码:

import AVFoundation

var audioPlayer = AVAudioPlayer()

func playAudio() {
    // Set the sound file name & extension
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Flip 02", ofType: "wav")!)

    // Preperation
    try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: AVAudioSessionCategoryOptions.MixWithOthers)
    try! AVAudioSession.sharedInstance().setActive(true)

    // Play the sound
    do {
        try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    } catch {
        print("there is \(error)")
    }
}

文档详情:

  

AVAudioSessionCategoryOptionMixWithOthers

     

将此会话中的音频与来自其他活动会话的音频混合。

     

仅在会话类别为时有效   AVAudioSessionCategoryPlayAndRecord或AVAudioSessionCategoryPlayback。   (如果会话类别是AVAudioSessionCategoryAmbient,则隐含。)

     

如果您在使用此选项时激活会话,则应用的音频   不会中断来自其他应用程序(例如音乐应用程序)的音频。如果   不使用此选项(或隐式混合的类别),   激活会话将中断其他不可混合的会话。

要停止,你可以这样做:

do {

        try AVAudioSession.sharedInstance().setActive(false)

    } catch let error as NSError {

        print(error.localizedDescription)

    }