(1) 切换场景,声音不在播放
我使用cocostudio 1.6.0 场景编译器制作了一个登录场景,然后,切换场景后,本来正在播放的音乐却消失了,我可以保证的说,我没有调用:
CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
来停止播放音乐,那问题出在了哪里?
很是感谢网上的无名前辈给了自己一个很好的解答,我简单的写下看下这个代码:
// 切换场景时,调用的onExit void LoginScene::onExit() { SceneReader::sharedSceneReader()->purge(); // 问题就在这儿 CCArmatureDataManager::purge(); GUIReader::shareReader()->purge(); CCLayer::onExit(); } // 查看下内部实现代码 void SceneReader::purge() { cocos2d::extension::DictionaryHelper::shareHelper()->purgeDictionaryHelper(); TriggerMng::getInstance()->destroyInstance(); _pfnSelector = NULL; _pListener = NULL; // 关键之处,被释放掉了哦 CocosDenshion::SimpleAudioEngine::sharedEngine()->end(); CC_SAFE_DELETE(_sharedReader); }
既然找到了问题,那根据需要判断是否允许注释掉了,问题应该就解决了吧,然而感谢上帝,在切换场景后,音乐依然没有播放。
我将断点放置在SimpleAudioEngine的end(),stopBackgroundMusic(),pauseBackgroundMusic()中,大概的猜测下,是哪里调用了它,ok,问题找到了,大家看下CCComAudio.cpp处的代码:
void CCComAudio::onExit() { stopBackgroundMusic(true); // 问题关键处 stopAllEffects(); } void CCComAudio::stopBackgroundMusic(bool bReleaseData) { CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(bReleaseData); }
这样的话,大家是否明白了吗?