cocos2d-x 2.2.6 之 声音不播放

(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);
}

这样的话,大家是否明白了吗?

原文地址:https://www.cnblogs.com/SkyflyBird/p/5208562.html