zoukankan      html  css  js  c++  java
  • 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);
    }

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

  • 相关阅读:
    [MSDN] How to Debug a Release Build
    抽象成员 虚方法
    强制类型转换符 和 as 运算符
    一份超长的MySQL学习笔记
    Java反射基础
    c3p0config.xml
    一个JDBC封装工具类
    Spring5——IOC操作Bean管理(基于xml文件)
    Android游戏开发大全
    移除项目里的所有.svn命令
  • 原文地址:https://www.cnblogs.com/SkyflyBird/p/5208562.html
Copyright © 2011-2022 走看看