您的位置:首页 > 其它

Coco2dx中背景音乐及音效的控制封装类

2015-06-09 11:33 246 查看
代码版本为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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: