天天看點

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

    //圓形進度條;

    //首先建立一張圖檔;

    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");

    }

}

cocos2dX 學習筆記——音樂、音效和進度條

.h中

cocos2dX 學習筆記——音樂、音效和進度條