上QQ阅读APP看书,第一时间看更新
3.5 在Cocos2d-x中播放声音
之前的内容主要都是介绍如何在屏幕上显示图像,事实上除了图像之外,音乐的播放也可以被理解为一种显示的方式,本节将学习在Cocos2d-x中播放声音的方法。
(1)在HelloWorld.h中对HelloWorld类进行如下定义:
01 class HelloWorld : public Cocos2d::Layer 02 { 03 public: 04 bool is_paused; 05 static Cocos2d::Scene* createScene(); 06 virtual bool init(); 07 void play(Cocos2d::Object* pSender); //播放音乐 08 void stop(Cocos2d::Object* pSender); //停止音乐 09 void pause(Cocos2d::Object* pSender); //暂停 10 CREATE_FUNC(HelloWorld); 11 };
(2)在HelloWorldScene.cpp中实现这些方法,如范例3-8所示,完整代码可见源文件本章目录下的项目ChapterThree05。
【范例3-8】在Cocos2d-x中实现音乐的播放和暂停等操作。
01 #include "HelloWorldScene.h" 02 #include "SimpleAudioEngine.h" 03 USING_NS_CC; 04 Scene* HelloWorld::createScene() 05 { 06 auto scene = Scene::create(); 07 auto layer = HelloWorld::create(); 08 scene->addChild(layer); 09 return scene; 10 } 11 bool HelloWorld::init() 12 { 13 if ( !Layer::init() ) 14 { 15 return false; 16 } 17 is_paused = false; 18 //播放按钮 19 auto* label_play = Label::create("play", "Arial", 40); 20 auto* pLabel_play = MenuItemLabel::create(label_play, this, menu_selector(HelloWorld::play)); 21 auto* button_play = Menu::create(pLabel_play, NULL); 22 button_play->setPosition(160,180); 23 addChild(button_play); 24 //暂停按钮 25 auto* label_pause = Label::create("pause", "Arial", 40); 26 auto* pLabel_pause = MenuItemLabel::create(label_pause, this, menu_selector(HelloWorld::pause)); 27 auto* button_pause = Menu::create(pLabel_pause, NULL); 28 button_pause->setPosition(320,180); 29 addChild(button_pause);30 30 //停止按钮 31 auto* label_stop = Label::create("stop", "Arial", 40); 32 auto* pLabel_stop = MenuItemLabel::create(label_stop, this, menu_selector(HelloWorld::stop)); 33 auto* button_stop = Menu::create(pLabel_stop, NULL); 34 button_stop->setPosition(480,180); 35 addChild(button_stop); 36 return true; 37 } 38 void HelloWorld::play(Cocos2d::Object* pSender) 39 { //如果背景音乐被暂停则继续播放 40 if (is_paused) 41 { 42 CocosDenshion::SimpleAudioEngine::sharedEngine()-> resumeBackgroundMusic(); 43 } 44 else 45 { //否则重新播放 46 CocosDenshion::SimpleAudioEngine::sharedEngine()-> playBackgroundMusic("music.mp3"); 47 } 48 is_paused = false; 49 } 50 void HelloWorld::stop(Cocos2d::Object* pSender) 51 { //停止音乐 52 is_paused = false; 53 CocosDenshion::SimpleAudioEngine::sharedEngine()-> stopBackgroundMusic(); 54 } 55 void HelloWorld::pause(Cocos2d::Object* pSender) 56 { //暂停播放音乐 57 is_paused = true; 58 CocosDenshion::SimpleAudioEngine::sharedEngine()-> pauseBackgroundMusic(); 59 }
本例运行后的界面如图3-12所示,单击屏幕上的3个标签按钮则会执行音乐的播放、暂停等操作。
图3-12 可以单击按钮进行音乐的播放暂停等操作
在使用Cocos2d-x播放音乐时需要引入文件SimpleAudioEngine.h(如范例第02行所示),之后就可以使用如范例第42、46、53、58行所示的代码来对音乐进行操作了。因为代码非常简单,这里便不再做太多介绍了。
现在需要读者思考一个问题,为什么在播放音乐时使用的方法是playBackgroundMusic而不是playMusic?Background是背景的意思,是不是说这个方法只能用来播放背景音乐?那么什么音乐不是背景音乐呢?
实际上该方法是可以播放任何音乐的,但是比较适合播放大段的音乐,而在游戏中大段的音乐常常被用来作为背景音乐使用。在游戏中一些短小的音乐(如怪物的叫声、打斗声等)则是要通过其他方法来播放的,这些内容将在下一节介绍。