在孩子的 -onExit 方法中停止声音?

Posted

技术标签:

【中文标题】在孩子的 -onExit 方法中停止声音?【英文标题】:Stopping sound in -onExit method of child? 【发布时间】:2012-07-27 14:01:31 【问题描述】:

我有三个类,我们称它们为 A、B 和 C。A 类添加了一个 CCLayer 类,称为 B。B 也添加了一个 CCLayer 子类,称为 C。现在,C 播放我想要的声音效果当场景 A 被替换时停止。我假设如果场景 A 被调用 -replaceScene 替换,它的所有子节点也会被移除和清理。所以我试图将我的一段应该停止声音的代码放入 C 类的 -onExit 方法中。但是 -onExit 永远不会在被替换场景的任何孩子上调用。为什么会这样,我该如何解决?

所有方法(停止声音等)都有效,我只是不知道在哪里调用它们。情况基本上如下:我在我的主场景中,如果我点击“主菜单”按钮,我希望它的孩子停止播放任何声音。孩子们怎么知道他们的父母被释放了?

【问题讨论】:

【参考方案1】:

如果没有为节点调用 onExit,则意味着它没有从场景层次结构中删除。这指向内存泄漏,特别是保留周期。您可以通过在 CCScene 的 dealloc 方法中设置断点来确认这一点。如果切换场景时没有命中,你就是在泄露场景。

【讨论】:

但是cclayer对象是autorelease对象,应该没有问题吧?我通常调用 -node 或 -alloc -initwithsomething -autorelease ,它们应该可以正确完成工作。然而,为什么不调用 -onExit 对我来说是个谜...... 根本不调用-dealloc 方法。可能是什么原因? -onEnter 似乎也增加了 1... 为什么会这样,我该怎么办? 好的,我想通了。我必须将 [super onExit] 放入我的 -onExit 方法中,以便释放类,这对我来说似乎很奇怪......你能解释一下原因吗?

以上是关于在孩子的 -onExit 方法中停止声音?的主要内容,如果未能解决你的问题,请参考以下文章

当用户按下主页按钮时停止声音

在 iOS (Novocaine) 上播放和停止声音样本

如何从动作栏上的soundpool中停止声音

在 Xcode(声音)中保持和释放?

XNA 声音开始或停止播放时的小噪音

AudioKit 停止并开始产生奇怪的声音