完全删除 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 变量的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 如何自动从其父节点中删除 skspritenode