cocos2dX 学习笔记——音乐、音效和进度条

每个游戏都需要音乐和音效,当然进度条也是必不可少一种,可以用于于技能CD,所以就用代码介绍和实现一下以上三种。

.cpp中

#include "FifthScene.h"
#include "HelloWorldScene.h"
#include "cocos2d.h"
#include "fourthScene.h"

//音乐需要SimpleAudioEngine头文件 还需要CocosDenshion命名空间;
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;

USING_NS_CC;

cocos2d::CCScene * FifthScene::createScene()
{
    CCScene * scene = CCScene::create();
    FifthScene * layer = FifthScene::create();
    scene->addChild(layer);
    return scene;
}

bool FifthScene::init()
{
    if (!Layer::init())
    {
        return false;
    }

    //MenuItemSprite;
    Sprite * spriteNormal = Sprite::create("shi.png");
    Sprite * spriteSelect = Sprite::create("ming.png");
    MenuItemSprite * pMenuItem = MenuItemSprite::create(
        spriteNormal,
        spriteSelect,
        CC_CALLBACK_1(FifthScene::EnterFifthScene, this));

    //MenuItemLabel;
    Label * label1 = Label::create("This is My FifthScene", "calibri.ttf", 30);
    label1->setColor(Color3B(255, 0, 0));
    MenuItemLabel * pMenuItemLabel = MenuItemLabel::create(label1, CC_CALLBACK_1(FifthScene::EnterFifthScene, this));

    //MenuItemToggle;
    //未选中的精灵;
    auto spriteNToggle = Sprite::create("quan.png");
    //选中状态的精灵;
    auto spriteToggle = Sprite::create("yuan.png");
    //将精灵包装成Menuitem 用于创建toggle;
    auto musicOn = MenuItemSprite::create(spriteToggle, spriteToggle);
    auto musicOff = MenuItemSprite::create(spriteNToggle, spriteNToggle);
    //创建toggle;
    MenuItemToggle * menuItemToggle = MenuItemToggle::createWithCallback(
        CC_CALLBACK_1(FifthScene::menuCallBack, this),
        musicOn,
        musicOff,
        NULL);

    //auto menu = Menu::create(menuItemToggle, NULL);
    //this->addChild(menu);

    //创建音乐音效点击按钮;
    MenuItemSprite * btnMenuSprite = MenuItemSprite::create(
        Sprite::create("ren.png"),
        Sprite::create("li.png"),
        CC_CALLBACK_1(FifthScene::btnSpriteCallBack, this));
    //预加载;
    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("yue.wav");
    SimpleAudioEngine::sharedEngine()->preloadEffect("yin.wav");
    //播放音乐;
    SimpleAudioEngine::sharedEngine()->playBackgroundMusic("yue.wav");
    isPause = false;

    //创建Menu;
    Menu * pMenu = Menu::create(pMenuItem, pMenuItemLabel, menuItemToggle, btnMenuSprite, NULL);
    pMenu->setPosition(Director::getInstance()->convertToUI(Point(500, 300)));
    //间隔;
    pMenu->alignItemsVerticallyWithPadding(55);
    this->addChild(pMenu);
    pMenuItem->setScale(3);


    ////创建进度条;
    //表示进度条到多少百分比  执行3秒 停在80%;
    //auto progressTo=ProgressTo::create(3,80);
    //表示进度条从百分几到百分几  执行三秒 从20% 到80% ;
    //auto progressFromTo = ProgressFromTo::create(3,20,80);
    //    ProgressTimer 用来渲染精灵对象的百分比 有三种形态Radial, Horizontal or vertical ;
    //首先生成一个ProgressTimer对象;
    //auto pgTimer = ProgressTimer::create(Sprite::create("xuan.png"));
    ////设置进度条类型;
    //pgTimer->setType(ProgressTimer::Type::BAR);
    ////添加到this中;
    //this->addChild(pgTimer);
    ////让进度条动起来;
    //pgTimer->runAction(RepeatForever::create(progressTo));

    /*setMidpoint;
    MidPoint点是用来定义一个进度条的起点位置,如果用的是radials 那就是中心点位置;
    如果是bar ;
    从左到右,设置midpoint为Point(0,y)  ;
    从右到左,设置midpoint为Point(1,y)    ;
    从上到下,设置midpoint为Point(x,1)  ;
    从下到上,设置midpoint为Point(x,0)    ;

    setBarChangeRate:  分别表示x轴的改变与y轴的改变;
    midpoint需要和BarChangeRate配合才能展示出不同效果进度条
    Point(x,y);表示动画完成后x轴与y轴分别的改变量
    point(0,1);表示最后水平方向不变 只是竖直方向改变了1也就是100%

    */

    //圆形进度条;
    //首先创建一张图片;
    auto sp1 = Sprite::create("yuan.png");
    //设置进度条的速度和到达目标量;
    auto pt1 = ProgressTo::create(3.0f, 85);
    //生成一个ProgressTimer对象;
    auto ptm1 = ProgressTimer::create(sp1);
    //设置进度条类型;
    ptm1->setType(ProgressTimerType::RADIAL);
    //使进度条运动;
    ptm1->runAction(RepeatForever::create(pt1));
    ptm1->setPosition(Point(100, 500));
    this->addChild(ptm1);


    //条形进度条;
    //从左到右;
    auto sp2 = Sprite::create("xuan.png");
    auto pt2 = ProgressTo::create(5.0f, 100);
    auto ptm2 = ProgressTimer::create(sp2);
    ptm2->setType(ProgressTimerType::BAR);
    ptm2->runAction(pt2);
    ptm2->setMidpoint(Point(0, 1));
    ptm2->setBarChangeRate(Point(1, 0));
    ptm2->setPosition(300, 500);
    this->addChild(ptm2);

    //从下到上;
    auto sp3 = Sprite::create("xuan.png");
    auto pt3 = ProgressTo::create(3.5f, 75);
    auto ptm3 = ProgressTimer::create(sp3);
    ptm3->setType(ProgressTimerType::BAR);
    ptm3->runAction(RepeatForever::create(pt3));
    ptm3->setMidpoint(Point(1, 0));
    ptm3->setBarChangeRate(Point(0, 1));
    ptm3->setPosition(Point(550, 500));
    this->addChild(ptm3);

    //变幻形态;
    auto sp4 = Sprite::create("yuan.png");
    auto pt4 = ProgressTo::create(4.5f, 100);
    auto ptm4 = ProgressTimer::create(sp4);
    ptm4->setType(ProgressTimerType::RADIAL);
    ptm4->setPosition(Point(600, 500));
    //从当前的tint转换为自定义的tint;
    auto tint = Sequence::create(
        TintTo::create(3, 255, 0, 0),
        TintTo::create(2, 0, 255, 0),
        TintTo::create(5, 0, 0, 255),
        NULL);
    //淡入实现;
    auto fade = Sequence::create(
        FadeTo::create(3, 0),
        FadeTo::create(3, 255),
        NULL);

    ptm4->runAction(RepeatForever::create(pt4));
    ptm4->runAction(RepeatForever::create(tint));
    //ptm4->runAction(RepeatForever::create(fade));
    this->addChild(ptm4);

    return true;
}

void FifthScene::EnterFifthScene(Ref * ref)
{
    Director::getInstance()->replaceScene(TransitionFadeTR::create(1.0f, HelloWorld::createScene()));
}

//参数Ref标识点击的MenuItem;
void FifthScene::menuCallBack(Ref * ref)
{
    auto item = (MenuItemToggle *)ref;
    //获取当前选择的下标 根据下标TODO ;
    item->getSelectedIndex();
    CCLOG("%d", item->getSelectedIndex());
    if (item->getSelectedIndex() == 0)
    {
    }
    else if (item->getSelectedIndex() == 1)
    {
        ////关于音乐;
        ////预加载背景音乐;
        //SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music.mp3");
        ////开始播放背景音乐, true 标识循环;
        //SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music.mp3", true);
        ////停止背景音乐 传参代表是否释放音乐文件;
        //SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
        ////暂停背景音乐;
        //SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
        ////重新调用背景音乐;
        //SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
        ////返回不二类型参数,表示是否再放背景音乐;
        //SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying();
        ////设置音量0.0-1.0;
        //SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5f);
        //音乐释放;
        //SimpleAudioEngine::sharedEngine()->end();

        ////关于音效;
        ////预加载背景音效;
        //SimpleAudioEngine::sharedEngine()->preloadEffect("music.mp3");
        ////开始播放音效 false代表不循环;
        //SimpleAudioEngine::sharedEngine()->playEffect("music.mp3",false);
        ////停止音效  可以选择单独停掉一个音效 这个值是由playEffect返回的;
        //SimpleAudioEngine::sharedEngine()->stopEffect(2);
        ////停止所有音效;
        //SimpleAudioEngine::sharedEngine()->stopAllEffects();
        ////暂停音效;
        //SimpleAudioEngine::sharedEngine()->pauseEffect(2);
        ////重新开始音效;
        //SimpleAudioEngine::sharedEngine()->resumeEffect(2);
        ////暂停所有音效;
        //SimpleAudioEngine::sharedEngine()->pauseAllEffects();
        ////重新开始所有音效;
        //SimpleAudioEngine::sharedEngine()->resumeAllEffects();
        ////设置音效音量;
        //SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);
        ////卸载音效;
        //SimpleAudioEngine::sharedEngine()->unloadEffect("music.mp3");
        //获取音量;
        //SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume();

    }
}

void FifthScene::btnSpriteCallBack(Ref * ref)
{
    if (isPause == false)
    {
        SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
        isPause = true;
        CCLOG("false");
    }
    else
    {
        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
        SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);
        isPause = false;
        CCLOG("true");
    }

}

.h中

cocos2dX 学习笔记——音乐、音效和进度条_第1张图片

 

你可能感兴趣的:(cocos2dX)