Coco2dx中背景音樂及音效的控制封裝類

代碼版本爲cocos2dx2.0   語言 C++

使用Musicdata單例對遊戲中的音樂和音效進行控制


首先是.h


#ifndef  _MUSIC_DATA_H_

#define _MUSIC_DATA_H_


#include "cocos2d.h"

#include "cocos-ext.h"

#include "SimpleAudioEngine.h"


using namespace std;

USING_NS_CC;

USING_NS_CC_EXT;

static const string sBackgroundMusicPath[] = {
"1.mp3",//1

"2.mp3",//2

"3.mp3",//3

};
#define BACK_GROUND_PATH(file_name) CCFileUtils::sharedFileUtils()->fullPathForFilename( CCString::createWithFormat("music/background/%s", file_name.c_str())->getCString() ).c_str()
#define EFFECT_PATH(file_name) CCFileUtils::sharedFileUtils()->fullPathForFilename( CCString::createWithFormat("music/effect/%s", file_name)->getCString() ).c_str()

class MusicData
{
public:
static MusicData* sharedInstance(void);
static void puge();
void playBackGroundMusic(int id);  //播放背景音樂
unsigned int playEffect(string effect_name, bool loop = false);//播放某個音效
void stopEffect(string effect_name);   //暫停某個音效
void stopAllEffect();
void preLoad();
private:
MusicData();
~MusicData();
map<string, unsigned int> m_mEffect;  //存儲已經加載了的音效,獲取其ID,便於控制
string m_BackGroundMusic;
};
#endif



然後.cpp文件

#include "MusicData.h"


static MusicData* s_Instance = NULL;
MusicData* MusicData::sharedInstance( void )
{
if (!s_Instance)
{
s_Instance = new MusicData();
}

return s_Instance;
}


void MusicData::puge()
{
CC_SAFE_DELETE(s_Instance);
}


MusicData::MusicData()
{
preLoad();
}


MusicData::~MusicData()
{
s_Instance = NULL;
}


void MusicData::playBackGroundMusic( int id )
{
  if (m_BackGroundMusic != sBackgroundMusicPath[id])
  {
  m_BackGroundMusic = sBackgroundMusicPath[id];
  CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(BACK_GROUND_PATH(m_BackGroundMusic), true);
  }
}


void MusicData::preLoad()
{
CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(EFFECT_PATH("btnclick.mp3"));
}


unsigned int MusicData::playEffect( string effect_name, bool loop )
{
unsigned int effect_id = CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect(EFFECT_PATH(effect_name.c_str()), loop);

map<string, unsigned int>::iterator it = m_mEffect.find(effect_name);
if (it!=m_mEffect.end())
{
it->second = effect_id;
}
else
{
m_mEffect.insert(make_pair(effect_name, effect_id));
}


return effect_id;
}


void MusicData::stopEffect( string effect_name )
{
unsigned int effect_id = m_mEffect[effect_name];
CocosDenshion::SimpleAudioEngine::sharedEngine()->stopEffect(effect_id);
}


void MusicData::stopAllEffect()
{
CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects();
}

發佈了17 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章