每個遊戲都需要音樂和音效,當然進度條也是必不可少一種,可以用于于技能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");
}
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csUjSyIWaW1mYwplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyITO2QTM0UTM5ATNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
.h中