• cocos2dx-音乐音效


    声  明


           本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。

    gl.paea.cn版权所有。




           大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说到了“碰撞”不知道大家有没有做出效果来呢,这里还是提示一下,圆形碰撞是很常用的哦。下面我们就开始今天的课程吧,又是一个最常用的东东--音乐音效。



    【一】:特性


           在cocos2dx开发中,我们音乐的选择也是有区别的,因为虽然cocos2dx实现了跨平台,但是各个平台之间的标准还是乱七八糟。没有人任何机构来统一规范,所以导致我们的音乐要针对客户端准备。在游戏中,我们能听到的音乐有2中,1是长长的背景音乐,2是短短的特效音效。那么这两种选用什么格式的最好呢?


    背景音乐

    android         Mp3  MID  WAV

    ios                 Mp3  CAF


    音效

    android     OGG(仅支持)

    ios             CAF


           这里只是推荐不是支持列表哦,可以看出来,Mp3由于他的特性所以最适合做背景音乐,而音效由于各个平台的不同,所以最佳选择也就不同了。当然了,这都不是问题,因为就算你们各个平台直接不能互通,万能的中国人早在十几年前就发明了音乐格式转换了,比如格式工厂等等,丫丫,小菜儿。


    【二】:函数


    背景音乐

    preloadBackgroundMusic(音乐路径);                //预加载音乐

    playBackgroundMusic(音乐路径,是否重复);     //播放音乐

    pauseBackgroundMusic()                                   //暂停

    stopBackgroundMusic()                                      //停止

    resumeBackgroundMusic()                                //继续播放

    rewindBackgroundMusic()                                  //从头播放

    isBackgroundMusicPlaying()                              //获取背景音乐是否在播放

    getBackgroundMusicVolume()                           //获取音量

    setBackgroundMusicVolume()                           //设置音量


    音效

    preloadEffect(音效路径)                //预加载音效

    unloadEffect(音效路径)                 //释放音效文件

    playEffect(音效路径,是否重复)    //播放音效

    stopEffect(音效ID)                         //停止

    stopAllEffects()                               //全部停止

    pauseEffect(音效ID)                      //暂停

    pauseAllEffects()                            //全部暂停

    resumeEffect(音效ID)                    //继续播放

    resumeAllEffects()                          //全部继续播放

    getEffectsVolume()                        //获取音量

    setEffectsVolume()                        //设置音量




    【三】:示例


    1.新建项目 musicdemo

    2.加载3张图片



    musicdemo.h


    1.包含音乐类和扩展类

    #include "SimpleAudioEngine.h"

    #include "cocos-ext.h"

    2.引用命名空间cocos2d::extension

    using namespace cocos2d::extension;

    3.写3个对应的回调函数

    void playmusic(CCObject * sender,CCControlEvent);

    void pausemusic(CCObject * sender,CCControlEvent);

    void stopmusic(CCObject * sender,CCControlEvent);



    musicdemo.cpp


    1.添加3个按钮

    //创建3个按钮

    CCScale9Sprite* sp1 = CCScale9Sprite::create("1.png");

    CCScale9Sprite* sp2 = CCScale9Sprite::create("2.png");

    CCScale9Sprite* sp3 = CCScale9Sprite::create("3.png");

    CCControlButton * b1=CCControlButton::create(sp1);

    CCControlButton * b2=CCControlButton::create(sp2);

    CCControlButton * b3=CCControlButton::create(sp3);

    b1->setPosition(ccp(mysize.width/2-100, mysize.height/2+100));

    b2->setPosition(ccp(mysize.width/2, mysize.height/2+100));

    b3->setPosition(ccp(mysize.width/2+100, mysize.height/2+100));

    b1->addTargetWithActionForControlEvents(

       this,

       cccontrol_selector(HelloWorld::playmusic),

       CCControlEventTouchDown

    );

    b2->addTargetWithActionForControlEvents(

       this,

       cccontrol_selector(HelloWorld::pausemusic),

       CCControlEventTouchDown

    );

    b3->addTargetWithActionForControlEvents(

       this,

       cccontrol_selector(HelloWorld::stopmusic),

       CCControlEventTouchDown

    );

    b1->setPreferredSize(ccp(57,57));

    b2->setPreferredSize(ccp(57,57));

    b3->setPreferredSize(ccp(57,57));

    this->addChild(b1, 0,1);

    this->addChild(b2, 0,1);

    this->addChild(b3, 0,1);



    2.根据当前系统判断预加载的文件

    这里注意一下,在win下"/music/winback.mid"也可以找到这个音乐,但是android下不行,所以要注意开头不要加“/”

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

       #define MUSIC_FILE        "music/winback.mid"

    #elif (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY || CC_TARGET_PLATFORM == CC_PLATFORM_LINUX )

       #define MUSIC_FILE        "none.ogg"

    #else

       #define MUSIC_FILE        "music/androidback.mp3"

    #endif



    3.预加载音乐,设置音量

    //加载音乐

    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(MUSIC_FILE);

    //设置默认音量

    SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(1);



    4.完成3个回调函数

    void HelloWorld::playmusic(CCObject * sender,CCControlEvent){

       SimpleAudioEngine::sharedEngine()->playBackgroundMusic(MUSIC_FILE,true);

    }

    void HelloWorld::pausemusic(CCObject * sender,CCControlEvent){

       SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();

    }

    void HelloWorld::stopmusic(CCObject * sender,CCControlEvent){

       SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();

    }



           好了,最后我们在win上试一下,我也打好了apk包,大家可以直接下载试一下android的环境



  • 相关阅读:
    Visual studio 调试发布到IIS站点方式一
    WPF设计界面不执行代码
    IIS发布ASP.NET Core
    mfc/格式转换
    【二维数组内存申请】
    【DLL测试】为DLL项目建立测试
    自己写的一个函数,用来自动连接对话框上的两个控件(画线)
    mfc 在VC的两个对话框类中传递参数的三种方法
    C语言extern作用(全局变量)
    图形对象的创建(常用图形对象的创建方法及特殊属性)
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6091976.html
Copyright © 2020-2023  润新知