以前的內容主要都是介紹如何在屏幕上顯示圖像,事實上除了圖像以外,音樂的播放也能夠被理解爲一種顯示的方式,本節將學習在Cocos2d-x中播放聲音的方法。segmentfault
(1)在HelloWorld.h中對HelloWorld類進行以下定義:學習
class HelloWorld : public Cocos2d::Layer { public: bool is_paused; static Cocos2d::Scene* createScene(); virtual bool init(); void play(Cocos2d::Object* pSender); //播放音樂 void stop(Cocos2d::Object* pSender); //中止音樂 void pause(Cocos2d::Object* pSender); //暫停 CREATE_FUNC(HelloWorld); };
(2)在HelloWorldScene.cpp中實現這些方法,如範例3-7所示,完整代碼可見源文件本章目錄下的項目ChapterThree05。this
【範例3-7 在Cocos2d-x中實現音樂的播放和暫停等操做】spa
#include "HelloWorldScene.h" #include "SimpleAudioEngine.h" USING_NS_CC; Scene* HelloWorld::createScene() { auto scene = Scene::create(); auto layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !Layer::init() ) { return false; } is_paused = false; //播放按鈕 auto* label_play = Label::create("play", "Arial", 40); auto* pLabel_play = MenuItemLabel::create(label_play, this, menu_selector(HelloWorld::play)); auto* button_play = Menu::create(pLabel_play, NULL); button_play->setPosition(160,180); addChild(button_play); //暫停按鈕 auto* label_pause = Label::create("pause", "Arial", 40); auto* pLabel_pause = MenuItemLabel::create(label_pause, this, menu_selector(HelloWorld::pause auto* button_pause = Menu::create(pLabel_pause, NULL); button_pause->setPosition(320,180); addChild(button_pause);30 //中止按鈕 auto* label_stop = Label::create("stop", "Arial", 40); auto* pLabel_stop = MenuItemLabel::create(label_stop, this, menu_selector(HelloWorld::stop)); auto* button_stop = Menu::create(pLabel_stop, NULL); button_stop->setPosition(480,180); addChild(button_stop); return true; } void HelloWorld::play(Cocos2d::Object* pSender) { //若是背景音樂被暫停則繼續播放 if (is_paused) { CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } else { //不然從新播放 CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music.mp3"); } is_paused = false; } void HelloWorld::stop(Cocos2d::Object* pSender) { //中止音樂 is_paused = false; CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(); } void HelloWorld::pause(Cocos2d::Object* pSender) { //暫停播放音樂 is_paused = true; CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); }
本例運行後的界面如圖3-12所示,點擊屏幕上的3個標籤按鈕則會執行音樂的播放、暫停等操做。
圖3-12 能夠點擊按鈕進行音樂的播放暫停等操做code
在使用Cocos2d-x播放音樂時須要引入文件SimpleAudioEngine.h(如範例第02行所示),以後就可使用如範例第4二、4六、5三、58行所示的代碼來對音樂進行操做了。由於代碼很是簡單,這裏便再也不作太多介紹了。遊戲
如今須要讀者思考一個問題,爲何在播放音樂時使用的方法是playBackgroundMusic而不是playMusic?Background是背景的意思,是否是說這個方法只能用來播放背景音樂?那麼什麼音樂不是背景音樂呢?遊戲開發
實際上該方法是能夠播聽任何音樂的,可是比較適合播放大段的音樂,而在遊戲中大段的音樂經常被用來做爲背景音樂使用。在遊戲中一些短小的音樂(如怪物的叫聲、打鬥聲等)則是要經過其餘方法來播放的,這些內容將在下一節介紹。開發
Cocos2d-x遊戲開發學習筆記1--在Cocos2d中顯示圖像
《Cocos2d-x遊戲開發實戰精解》學習筆記2--在Cocos2d-x中顯示一行文字get