最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Cocos2d-x中背景音樂和音效使用實(shí)例

 更新時(shí)間:2014年09月12日 09:38:03   作者:皂莢花  
這篇文章主要介紹了Cocos2d-x中背景音樂和音效使用實(shí)例,注意本文中使用大量注釋來說明背景音樂和音效的使用方法,需要的朋友可以參考下

游戲中的音樂和音效是必不可少的,好的音樂可以給我們留下很深的印象也決定了這個(gè)游戲的品質(zhì)。今天我們來學(xué)習(xí)一下cocos2d-x中如何使用音樂和音效。這些用到的函數(shù)都比較簡(jiǎn)單,現(xiàn)在直接上代碼。

//聲音預(yù)先處理類的頭文件
#ifndef _AUDIO_PRETREAT_H
#define _AUDIO_PRETREAT_H
#include "cocos2d.h"
//使用聲音引擎必須包含SimpleAudioEngeim.h頭文件
#include "SimpleAudioEngine.h"

using namespace cocos2d;
//聲音引擎的命名空間
using namespace CocosDenshion;

//類AudioPretrea采用單例設(shè)計(jì)模式

//把用到的音樂做為枚舉類型
enum MUSIC_TYPE
{
	MUSIC_TYPE_BACKGROUND //背景音樂
};

//把用到的音樂做為枚舉類型
enum EFFECT_TYPE
{
	EFFECT_TYPE_EFFECT1
};

class AudioPretreat
{
private:
	static AudioPretreat * m_audioPretreat;
public:
	//單例設(shè)計(jì)的時(shí)候需要用到的倆個(gè)函數(shù)
	static AudioPretreat * sharedAudioPretreat();
	static void freeAudioPretreat();
	//可以根據(jù)不同的平臺(tái)獲取不同的聲音文件
	char * getMusic(MUSIC_TYPE type);
	char * getEffect(EFFECT_TYPE type);
	//在init中完成聲音的預(yù)先加載
	bool init();
};

#endif
//聲音預(yù)先處理類的實(shí)現(xiàn)
#include "AudioPretreat.h"
//單例設(shè)計(jì)模式采用的慣用方式
AudioPretreat * AudioPretreat::m_audioPretreat = NULL;

AudioPretreat * AudioPretreat::sharedAudioPretreat()
{
	if(NULL == m_audioPretreat)
	{
		m_audioPretreat = new AudioPretreat();
	}
	return m_audioPretreat;
}

//在AppDelegate析構(gòu)的時(shí)候調(diào)用這個(gè)函數(shù)
void AudioPretreat::freeAudioPretreat()
{
	if(m_audioPretreat)
	{
		delete m_audioPretreat;
		m_audioPretreat = NULL;
	}
}

//根據(jù)不同的平臺(tái)獲得不同的聲音文件
char * AudioPretreat::getMusic(MUSIC_TYPE type)
{
	switch(type)
	{
	case MUSIC_TYPE_BACKGROUND:
		//WIN32,ANDROID,IOS都使用MP3格式的背景音樂
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
	return "background-music.mp3";
#else(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
	return "background-music.mp3";
#endif
	break;
	}
	return NULL;
}

//根據(jù)不同的平臺(tái)獲得不同的音效文件
char * AudioPretreat::getEffect(EFFECT_TYPE type)
{
	switch(type)
	{
	case EFFECT_TYPE_EFFECT1:
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
		return "pew-pew-lei.wav";
#else(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
		return "pew-pew-lei.ogg";
#endif
	}
	return NULL;
}

//init函數(shù)中完成一些初始化的操作
bool AudioPretreat::init()
{
	bool bRet = false;
	do
	{
		//預(yù)先加載聲音,參數(shù)是聲音文件
		SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(this->getMusic(MUSIC_TYPE_BACKGROUND));
		//加載音效
		SimpleAudioEngine::sharedEngine()->preloadEffect(this->getEffect(EFFECT_TYPE_EFFECT1));
		//設(shè)置聲音的大小0.0-1.0
		SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.1f);
		bRet = true;
	}
	while(0);

	return bRet;
}
// 下面就來看一下如何使用聲音引擎
bool HelloWorld::init()
{
  bool bRet = false;
  do
  {

    CC_BREAK_IF(! CCLayer::init());

		CCSize size = CCDirector::sharedDirector()->getVisibleSize();

		AudioPretreat::sharedAudioPretreat()->init();

		//以下是對(duì)背景音樂的一些操作

		//設(shè)置字符串,并且轉(zhuǎn)碼
		std::string str1 = "播放背景音樂";
		std::string str2 = "停止背景音樂";
		std::string str3 = "暫停背景音樂";
		std::string str4 = "恢復(fù)背景音樂";
		std::string str5 = "重頭播放背景音樂";
		std::string str6 = "背景音樂:加";
		std::string str7 = "背景音樂:減";
		GBKToUTF8(str1,"GB2312","UTF-8");
		GBKToUTF8(str2,"GB2312","UTF-8");
		GBKToUTF8(str3,"GB2312","UTF-8");
		GBKToUTF8(str4,"GB2312","UTF-8");
		GBKToUTF8(str5,"GB2312","UTF-8");
		GBKToUTF8(str6,"GB2312","UTF-8");
		GBKToUTF8(str7,"GB2312","UTF-8");

		CCMenuItemFont::setFontSize(24);
		CCMenuItemFont::setFontName("Arial");
		CCMenuItemFont * menu1 = CCMenuItemFont::create(str1.c_str(),this,menu_selector(HelloWorld::menu));
		menu1->setTag(1);
		CCMenuItemFont * menu2 = CCMenuItemFont::create(str2.c_str(),this,menu_selector(HelloWorld::menu));
		menu2->setTag(2);
		CCMenuItemFont * menu3 = CCMenuItemFont::create(str3.c_str(),this,menu_selector(HelloWorld::menu));
		menu3->setTag(3);
		CCMenuItemFont * menu4 = CCMenuItemFont::create(str4.c_str(),this,menu_selector(HelloWorld::menu));
		menu4->setTag(4);
		CCMenuItemFont * menu5 = CCMenuItemFont::create(str5.c_str(),this,menu_selector(HelloWorld::menu));
		menu5->setTag(5);
		CCMenuItemFont * menu6 = CCMenuItemFont::create(str6.c_str(),this,menu_selector(HelloWorld::menu));
		menu6->setTag(6);
		CCMenuItemFont * menu7 = CCMenuItemFont::create(str7.c_str(),this,menu_selector(HelloWorld::menu));
		menu7->setTag(7);

		CCMenu * leftMenu = CCMenu::create(menu1,menu2,menu3,menu4,menu5,menu6,menu7,NULL);
		leftMenu->alignItemsVerticallyWithPadding(5);
		leftMenu->setPositionX(size.width/4);
		this->addChild(leftMenu);

		//以下是對(duì)音效的操作
		std::string str11 = "播放音效";
		std::string str12 = "停止音效";
		std::string str13 = "暫停音效";
		std::string str14 = "恢復(fù)音效";
		std::string str15 = "從緩存中移除音效";
		std::string str16 = "音效:加";
		std::string str17 = "音效:減";
		GBKToUTF8(str11,"GB2312","UTF-8");
		GBKToUTF8(str12,"GB2312","UTF-8");
		GBKToUTF8(str13,"GB2312","UTF-8");
		GBKToUTF8(str14,"GB2312","UTF-8");
		GBKToUTF8(str15,"GB2312","UTF-8");
		GBKToUTF8(str16,"GB2312","UTF-8");
		GBKToUTF8(str17,"GB2312","UTF-8");

		CCMenuItemFont * menu11 = CCMenuItemFont::create(str11.c_str(),this,menu_selector(HelloWorld::menu));
		menu11->setTag(11);
		CCMenuItemFont * menu12 = CCMenuItemFont::create(str12.c_str(),this,menu_selector(HelloWorld::menu));
		menu12->setTag(12);
		CCMenuItemFont * menu13 = CCMenuItemFont::create(str13.c_str(),this,menu_selector(HelloWorld::menu));
		menu13->setTag(13);
		CCMenuItemFont * menu14 = CCMenuItemFont::create(str14.c_str(),this,menu_selector(HelloWorld::menu));
		menu14->setTag(14);
		CCMenuItemFont * menu15 = CCMenuItemFont::create(str15.c_str(),this,menu_selector(HelloWorld::menu));
		menu15->setTag(15);
		CCMenuItemFont * menu16 = CCMenuItemFont::create(str16.c_str(),this,menu_selector(HelloWorld::menu));
		menu16->setTag(16);
		CCMenuItemFont * menu17 = CCMenuItemFont::create(str17.c_str(),this,menu_selector(HelloWorld::menu));
		menu17->setTag(17);

		CCMenu * rightMenu = CCMenu::create(menu11,menu12,menu13,menu14,menu15,menu16,menu17,NULL);
		rightMenu->alignItemsVerticallyWithPadding(5);
		rightMenu->setPositionX(size.width*3/4);
		this->addChild(rightMenu);

    bRet = true;
  } while (0);

  return bRet;
}

void HelloWorld::menu(CCObject * sender)
{
	CCNode * node = (CCNode *)sender;
	int tag = node->getTag();
	switch(tag)
	{
	case 1:
		//播放聲音,第二個(gè)參數(shù)代表是否循環(huán)播放
		SimpleAudioEngine::sharedEngine()->playBackgroundMusic(
			AudioPretreat::sharedAudioPretreat()->getMusic(MUSIC_TYPE_BACKGROUND),true);
		break;
	case 2:
		SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
		break;
	case 3:
		//pause和resume成對(duì)使用
		SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
		break;
	case 4:
		SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
		break;
	case 5:
		SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
		break;
	case 6:
		//這個(gè)函數(shù)在win32上沒法改變聲音的大小,大家用f12跟進(jìn)函數(shù)的時(shí)候里邊是空,但是在android平臺(tái)上有實(shí)現(xiàn)
		SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(
			SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()+0.1f);
		break;
	case 7:
		//這個(gè)函數(shù)在win32上沒法改變聲音的大小,大家用f12跟進(jìn)函數(shù)的時(shí)候里邊是空,但是在android平臺(tái)上有實(shí)現(xiàn)
		SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(
			SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()-0.1f);
		break;
	case 11:
		//第二個(gè)參數(shù)設(shè)為true的話則循環(huán)播放,soundID是在HelloWorld的頭文件中定義的
		//音效函數(shù)不同于背景音樂的是會(huì)返回一個(gè)ID
		soundID = SimpleAudioEngine::sharedEngine()->playEffect(
			AudioPretreat::sharedAudioPretreat()->getEffect(EFFECT_TYPE_EFFECT1),true);
		break;
	case 12:
		//音效函數(shù)大多會(huì)傳入一個(gè)ID,因?yàn)橛螒蛑械囊粜Р恢挂粋€(gè)
		SimpleAudioEngine::sharedEngine()->stopEffect(soundID);
		break;
	case 13:
		SimpleAudioEngine::sharedEngine()->pauseEffect(soundID);
		break;
	case 14:
		SimpleAudioEngine::sharedEngine()->resumeEffect(soundID);
	case 15:
		//從緩存中移除音效,需要傳入移除的音效的名字
		SimpleAudioEngine::sharedEngine()->unloadEffect(
			AudioPretreat::sharedAudioPretreat()->getEffect(EFFECT_TYPE_EFFECT1));
	case 16:
		SimpleAudioEngine::sharedEngine()->setEffectsVolume(
			SimpleAudioEngine::sharedEngine()->getEffectsVolume()+0.1);
		break;
	case 17:
		SimpleAudioEngine::sharedEngine()->setEffectsVolume(
			SimpleAudioEngine::sharedEngine()->getEffectsVolume()-0.1);
		break;
	}
}
//編碼格式轉(zhuǎn)化函數(shù)
int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode)
{
	iconv_t iconvH;
	iconvH = iconv_open(fromCode, toCode);

	if (iconvH == 0)

	{
		return -1;
	}

	const char* strChar = gbkStr.c_str();
	const char** pin = &strChar;
	size_t strLength = gbkStr.length();
	char* outbuf = (char*) malloc(strLength*4);
	char* pBuff = outbuf;

	memset( outbuf, 0, strLength*4);
	size_t outLength = strLength*4;

	if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength))
	{
		iconv_close(iconvH);
		return -1;
	}

	gbkStr = pBuff;
	iconv_close(iconvH);

	return 0;
}

相關(guān)文章

  • C語言魔塔游戲的實(shí)現(xiàn)代碼

    C語言魔塔游戲的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C語言魔塔游戲的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • VC++的combobox控件用法匯總

    VC++的combobox控件用法匯總

    這篇文章主要介紹了VC++的combobox控件用法,對(duì)VC++初學(xué)者來說尤為重要,需要的朋友可以參考下
    2014-08-08
  • Qt的qDebug使用小結(jié)

    Qt的qDebug使用小結(jié)

    使用qDebug()函數(shù)它可以把調(diào)試信息直接輸出到控制臺(tái)上,本文就來介紹一下qDebug的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-06-06
  • C++ Qt屬性系統(tǒng)詳細(xì)介紹

    C++ Qt屬性系統(tǒng)詳細(xì)介紹

    這篇文章主要介紹了C++ Qt屬性系統(tǒng)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • VSCode遠(yuǎn)程代碼開發(fā)及DNS隧道端口轉(zhuǎn)發(fā)實(shí)現(xiàn)遠(yuǎn)程辦公代碼

    VSCode遠(yuǎn)程代碼開發(fā)及DNS隧道端口轉(zhuǎn)發(fā)實(shí)現(xiàn)遠(yuǎn)程辦公代碼

    這篇文章主要介紹了VSCode遠(yuǎn)程代碼開發(fā)及DNS隧道端口轉(zhuǎn)發(fā)實(shí)現(xiàn)遠(yuǎn)程辦公,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C++ sort排序之降序、升序使用總結(jié)

    C++ sort排序之降序、升序使用總結(jié)

    這篇文章主要介紹了C++ sort 排序(降序、升序)使用總結(jié),需要的朋友可以參考下
    2020-11-11
  • C語言動(dòng)態(tài)開辟內(nèi)存詳解

    C語言動(dòng)態(tài)開辟內(nèi)存詳解

    這篇文章主要為大家詳細(xì)介紹了C語言動(dòng)態(tài)開辟內(nèi)存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • VC List Control控件如何刪除選中的記錄實(shí)例詳解

    VC List Control控件如何刪除選中的記錄實(shí)例詳解

    這篇文章主要介紹了VC List Control控件如何刪除選中的記錄實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解C++句柄類

    詳解C++句柄類

    本篇文章給大家詳細(xì)分析了C++句柄類的相關(guān)知識(shí)點(diǎn),對(duì)此有需要的朋友跟著學(xué)習(xí)參考下吧。
    2018-06-06
  • C++中的單例模式介紹

    C++中的單例模式介紹

    單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設(shè)計(jì)模式。其意圖是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn),該實(shí)例被所有程序模塊共享
    2013-03-03

最新評(píng)論

册亨县| 威信县| 马龙县| 华坪县| 安吉县| 喀喇沁旗| 扎囊县| 万安县| 延川县| 东乌珠穆沁旗| 湾仔区| 陵水| 威信县| 阿鲁科尔沁旗| 汝城县| 公安县| 瓦房店市| 大方县| 安仁县| 阳西县| 湘西| 安阳市| 蛟河市| 衡水市| 隆昌县| 榆树市| 瑞昌市| 海城市| 兴海县| 兴文县| 临海市| 宜兴市| 东乌| 华蓥市| 庆云县| 比如县| 宜兰市| 南丰县| 鄂伦春自治旗| 商城县| 阜平县|