完全删除 SKSpriteNode 变量

Posted

技术标签:

【中文标题】完全删除 SKSpriteNode 变量【英文标题】:Completely delete SKSpriteNode variable 【发布时间】:2016-04-14 11:42:30 【问题描述】:

我有一个名为“backgroundMusic”的 SKSpriteNode 子类,它由一个 SKSpriteNode 和一个 AVAudioPlayer 文件组成。目标是在我实例化它后完全删除“backgroundMusic”。我尝试做:

backgroundMusic.removeFromParent()

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

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

backgroundMusic = nil

调用所有函数的过程仍在发生,当我重新实例化它时会导致问题。我相信会起作用的是,如果我完全删除“backgroundMusic”,这将停止函数调用过程,然后在需要时重新实例化它,它应该可以正常工作而没有问题。我该怎么做?

编辑我试过了:

self.delete(backgroundMusic)

它使应用程序崩溃。我应该使用这个吗?如果有怎么办?

【问题讨论】:

【参考方案1】:

这是因为你没有配置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)

    

【讨论】:

这不是我的问题。我想知道如何在实例化后删除我的变量“backgroundMusic”。音乐很好。 你必须提供更多的背景音乐代码,你的问题没有说明你的音乐停止后是否会继续。

以上是关于完全删除 SKSpriteNode 变量的主要内容,如果未能解决你的问题,请参考以下文章

删除子 SKSpriteNode

SKSpriteNode 从屏幕上消失后如何删除或销毁它

Xcode 如何自动从其父节点中删除 skspritenode

如何在Swift中正确地从父节点中删除SKSpriteNode的子类(要从数组中移除,屏幕上的空格......)?

从数组 spritekit swift 中删除节点

知道 skspritenode 已经完全移过另一个 skspritenode