Cocos2d-x實例:設置背景音樂與音效-HelloWorld場景實現

HelloWorld場景就是遊戲中的主菜單場景。HelloWorld.h文件代碼以下:
php

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片html

 

  1. #define __HELLOWORLD_SCENE_H__  函數

  2.   

  3.   

  4. #include "cocos2d.h"  網站

  5. #include "SimpleAudioEngine.h"                                          ①  this

  6. #include "SettingScene.h"  spa

  7.   

  8.   

  9. class HelloWorld : public cocos2d::Layer  .net

  10. {  code

  11. public:  orm

  12.     static cocos2d::Scene* createScene();  htm

  13.   

  14.   

  15.     virtual bool init();                                                    ②  

  16.     virtual void onEnter();  

  17.     virtual void onEnterTransitionDidFinish();  

  18.     virtual void onExit();  

  19.     virtual void onExitTransitionDidStart();  

  20.     virtual void cleanup();                                                 ③  

  21.   

  22.   

  23.     void menuItemHelpCallback(cocos2d::Ref* pSender);  

  24.     void menuItemStartCallback(cocos2d::Ref* pSender);  

  25.     void menuItemSettingCallback(cocos2d::Ref* pSender);  

  26.     CREATE_FUNC(HelloWorld);  

  27. };  

  28.   

  29.   

  30.   

  31.   

  32. bool HelloWorld::init()  

  33. {  

  34.     if ( !Layer::init() )  

  35.     {  

  36.         return false;  

  37.     }  

  38.   

  39.   

  40.     log("HelloWorld init");  

  41.   

  42.   

  43.     Size visibleSize = Director::getInstance()->getVisibleSize();  

  44.     Point origin = Director::getInstance()->getVisibleOrigin();  

  45.   

  46.   

  47.     Sprite *bg = Sprite::create("background.png");  

  48.   

  49.   

  50.     bg->setPosition(Point(origin.x + visibleSize.width/2,  

  51.         origin.y + visibleSize.height /2));  

  52.     this->addChild(bg);  

  53.   

  54.   

  55.     //開始精靈  

  56.     Sprite *startSpriteNormal = Sprite::create("start-up.png");  

  57.     Sprite *startSpriteSelected = Sprite::create("start-down.png");  

  58.   

  59.   

  60.     MenuItemSprite *startMenuItem = MenuItemSprite::create(startSpriteNormal,   

  61.         startSpriteSelected,  

  62.         CC_CALLBACK_1(HelloWorld::menuItemStartCallback, this));  

  63.     startMenuItem->setPosition(Director::getInstance()->convertToGL(Point(700, 170)));  

  64.   

  65.   

  66.     // 設置圖片菜單  

  67.     MenuItemImage *settingMenuItem = MenuItemImage::create(  

  68.         "setting-up.png",  

  69.         "setting-down.png",  

  70.         CC_CALLBACK_1(HelloWorld::menuItemSettingCallback, this));   

  71.     settingMenuItem->setPosition(Director::getInstance()->convertToGL(Point(480, 400)));  

  72.   

  73.   

  74.     // 幫助圖片菜單  

  75.     MenuItemImage *helpMenuItem = MenuItemImage::create(  

  76.         "help-up.png",  

  77.         "help-down.png",  

  78.         CC_CALLBACK_1(HelloWorld::menuItemHelpCallback, this));   

  79.     helpMenuItem->setPosition(Director::getInstance()->convertToGL(Point(860, 480)));  

  80.   

  81.   

  82.     Menu* mu = Menu::create(startMenuItem, settingMenuItem, helpMenuItem, NULL);      

  83.     mu->setPosition(Point::ZERO);  

  84.     this->addChild(mu);  

  85.   

  86.   

  87.     return true;  

  88. }  

  89.   

  90.   

  91. void HelloWorld::menuItemSettingCallback(Ref* pSender)  

  92. {     

  93.     auto sc = Setting::createScene();  

  94.     auto reScene = TransitionJumpZoom::create(1.0f, sc);  

  95.     Director::getInstance()->pushScene(reScene);  

  96.     SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ②  

  97. }  

  98.   

  99.   

  100. void HelloWorld::menuItemHelpCallback(Ref* pSender)  

  101. {  

  102.     MenuItem* item = (MenuItem*)pSender;  

  103.     log("Touch Help %p", item);  

  104.     SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ③  

  105. }  

  106.   

  107.   

  108. void HelloWorld::menuItemStartCallback(Ref* pSender)  

  109. {  

  110.     MenuItem* item = (MenuItem*)pSender;  

  111.     log("Touch Start %p", item);  

  112.     SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ④  

  113. }  

  114.   

  115.   

  116. void HelloWorld::onEnter()  

  117. {  

  118.     Layer::onEnter();  

  119.     log("HelloWorld onEnter");        

  120. }  

  121.   

  122.   

  123. void HelloWorld::onEnterTransitionDidFinish()  

  124. {  

  125.     Layer::onEnterTransitionDidFinish();  

  126.     log("HelloWorld onEnterTransitionDidFinish");  

  127.     //播放  

  128.     SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Jazz.mp3", true);       ⑤  

  129. }  

  130.   

  131.   

  132. void HelloWorld::onExit()  

  133. {  

  134.     Layer::onExit();  

  135.     log("HelloWorld onExit");  

  136. }  

  137.   

  138.   

  139. void HelloWorld::onExitTransitionDidStart()  

  140. {  

  141.     Layer::onExitTransitionDidStart();  

  142.     log("HelloWorld onExitTransitionDidStart");  

  143. }  

  144.   

  145.   

  146. void HelloWorld::cleanup()  

  147. {  

  148.     Layer::cleanup();  

  149.     log("HelloWorld cleanup");    

  150.     //中止  

  151.     SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Jazz.mp3");         ⑥  

  152. }  



上述代碼第①行using namespace CocosDenshion是使用命名空間CocosDenshion,它是CocosDenshion引擎所須要的。代碼②、③、④行SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav")是在點擊菜單時候播放音效。第⑤行代碼是onEnterTransitionDidFinish()函數中播放背景音樂。第⑥行代碼是cleanup()函數中中止播放背景音樂。

 

 

 

更多內容請關注Cocos2d-x系列圖書《Cocos2d-x實戰(卷Ⅰ):C++開發》

本書交流討論網站:http://www.cocoagame.net

歡迎加入cocos2d-x技術討論羣:25776038六、327403678

相關文章
相關標籤/搜索