《Cocos2d-x遊戲開發實戰精解》學習筆記4--實戰一個簡單的鋼琴

上一節學習了使用Cocos2d-x播放音樂的方法,可是那種方法通常只適合於播放較大的音樂,而通常比較短小的音樂(如遊戲中的打鬥、按鍵音效等)則要經過playEffect來播放。本節使用該方法以及以前學到的菜單按鈕的用法,製做了一個簡單的「鋼琴」遊戲,其中部分代碼如範例3-8所示,完整代碼詳見源文件本章目錄下的ChapterThree06項目。 segmentfault

【範例3-8 利用Cocos2d-x實現簡單的鋼琴】學習

#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;
    }
       for (int i = 1; i <= 7; i++) //預加載7個音符的mp3文件
       {
              CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(                                              String::createWithFormat("%d.mp3",i)->getCString());
       }
       //經過按鈕,建立7個琴鍵
       auto* pButton1 = MenuItemImage::create("button1.png",
                                                               "button2.png", this,menu_selector(HelloWorld::note1));
       auto* button1 = Menu::create(pButton1, NULL);
       button1->setPosition(50, 180);   //設置按鈕位置
       addChild(button1);
       /**此處省略了其餘5個按鈕的建立過程**/
       auto* pButton7 = MenuItemImage::create("button1.png",
                                                               "button2.png",
                                                               this,
                                                               menu_selector(HelloWorld::note7));
       auto* button7 = Menu::create(pButton7, NULL);
       button7->setPosition(50 + 90 * 6, 180); //按鈕x座標爲 50+90*i其中i爲按鍵編號減1
       addChild(button7);
    return true;
}
//第一個按鍵的響應操做,播放第1個音符
void HelloWorld::note1(Cocos2d::Object* pSender)
{
       CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("1.mp3");
}
//此處省略了其餘5個音符的響應操做
void HelloWorld::note7(Cocos2d::Object* pSender)
{
       CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("7.mp3");
}

運行以後的界面如圖3-13所示。當用戶點擊按鍵時按鍵將發生變化,並播放對應音符的聲音效果。
211242_1Ocm_2633993.png
圖3-13 「鋼琴」界面
211243_51yk_2633993.png
圖3-14 點擊屏幕中的按鍵將播放音樂this

播放這類較短音樂的方法與以前介紹的playBackgroundMusic方法是徹底相同的,只不過要將方法名所有改成playEffect就能夠了。spa

此外,因爲這類音樂是要反覆播放的,好比在鋼琴中某個音符是要反覆被播放的,而遊戲中某些怪物的叫聲也是要反覆出現的。若是每次要調用playEffect時都會從新對音樂文件進行加載,這就形成了資源浪費,所以能夠在場景初始化的時候對這些文件進行一個統一的預加載,如範例第17~22行所示。code

提示:實際上在使用playBackgroundMusic方法時也須要對音樂進行預加載,只不過在以前的範例中被簡化了。另外實際開發中還須要在程序退出時釋放加載了的音樂,釋放的方法爲unloadEffect。orm


《Cocos2d-x遊戲開發實戰精解》學習筆記1--在Cocos2d中顯示圖像
《Cocos2d-x遊戲開發實戰精解》學習筆記2--在Cocos2d-x中顯示一行文字
《Cocos2d-x遊戲開發實戰精解》學習筆記3--在Cocos2d-x中播放聲音遊戲


211322_nPja_2633993.png

相關文章
相關標籤/搜索