亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Cocos2d-x中背景音樂和音效使用實例

2020-01-26 15:19:31
字體:
來源:轉載
供稿:網友

游戲中的音樂和音效是必不可少的,好的音樂可以給我們留下很深的印象也決定了這個游戲的品質。今天我們來學習一下cocos2d-x中如何使用音樂和音效。這些用到的函數都比較簡單,現在直接上代碼。

//聲音預先處理類的頭文件#ifndef _AUDIO_PRETREAT_H#define _AUDIO_PRETREAT_H#include "cocos2d.h"//使用聲音引擎必須包含SimpleAudioEngeim.h頭文件#include "SimpleAudioEngine.h"using namespace cocos2d;//聲音引擎的命名空間using namespace CocosDenshion;//類AudioPretrea采用單例設計模式//把用到的音樂做為枚舉類型enum MUSIC_TYPE{	MUSIC_TYPE_BACKGROUND //背景音樂};//把用到的音樂做為枚舉類型enum EFFECT_TYPE{	EFFECT_TYPE_EFFECT1};class AudioPretreat{private:	static AudioPretreat * m_audioPretreat;public:	//單例設計的時候需要用到的倆個函數	static AudioPretreat * sharedAudioPretreat();	static void freeAudioPretreat();	//可以根據不同的平臺獲取不同的聲音文件	char * getMusic(MUSIC_TYPE type);	char * getEffect(EFFECT_TYPE type);	//在init中完成聲音的預先加載	bool init();};#endif
//聲音預先處理類的實現#include "AudioPretreat.h"http://單例設計模式采用的慣用方式AudioPretreat * AudioPretreat::m_audioPretreat = NULL;AudioPretreat * AudioPretreat::sharedAudioPretreat(){	if(NULL == m_audioPretreat)	{		m_audioPretreat = new AudioPretreat();	}	return m_audioPretreat;}//在AppDelegate析構的時候調用這個函數void AudioPretreat::freeAudioPretreat(){	if(m_audioPretreat)	{		delete m_audioPretreat;		m_audioPretreat = NULL;	}}//根據不同的平臺獲得不同的聲音文件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;}//根據不同的平臺獲得不同的音效文件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函數中完成一些初始化的操作bool AudioPretreat::init(){	bool bRet = false;	do	{		//預先加載聲音,參數是聲音文件		SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(this->getMusic(MUSIC_TYPE_BACKGROUND));		//加載音效		SimpleAudioEngine::sharedEngine()->preloadEffect(this->getEffect(EFFECT_TYPE_EFFECT1));		//設置聲音的大小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();		//以下是對背景音樂的一些操作		//設置字符串,并且轉碼		std::string str1 = "播放背景音樂";		std::string str2 = "停止背景音樂";		std::string str3 = "暫停背景音樂";		std::string str4 = "恢復背景音樂";		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);		//以下是對音效的操作		std::string str11 = "播放音效";		std::string str12 = "停止音效";		std::string str13 = "暫停音效";		std::string str14 = "恢復音效";		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:		//播放聲音,第二個參數代表是否循環播放		SimpleAudioEngine::sharedEngine()->playBackgroundMusic(			AudioPretreat::sharedAudioPretreat()->getMusic(MUSIC_TYPE_BACKGROUND),true);		break;	case 2:		SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();		break;	case 3:		//pause和resume成對使用		SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();		break;	case 4:		SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();		break;	case 5:		SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();		break;	case 6:		//這個函數在win32上沒法改變聲音的大小,大家用f12跟進函數的時候里邊是空,但是在android平臺上有實現		SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(			SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()+0.1f);		break;	case 7:		//這個函數在win32上沒法改變聲音的大小,大家用f12跟進函數的時候里邊是空,但是在android平臺上有實現		SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(			SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()-0.1f);		break;	case 11:		//第二個參數設為true的話則循環播放,soundID是在HelloWorld的頭文件中定義的		//音效函數不同于背景音樂的是會返回一個ID		soundID = SimpleAudioEngine::sharedEngine()->playEffect(			AudioPretreat::sharedAudioPretreat()->getEffect(EFFECT_TYPE_EFFECT1),true);		break;	case 12:		//音效函數大多會傳入一個ID,因為游戲中的音效不止一個		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;	}}//編碼格式轉化函數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;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕av日韩| 疯狂做受xxxx高潮欧美日本| 久久久精品免费视频| 中文字幕亚洲字幕| 久久精品中文字幕| 51午夜精品视频| 91视频九色网站| 久久久久久国产精品久久| 欧美理论在线观看| 国产精品中文字幕久久久| 日韩小视频在线观看| 日韩av综合中文字幕| 久久精品国产欧美亚洲人人爽| 欧美大片大片在线播放| 国产精品久久二区| 97人洗澡人人免费公开视频碰碰碰| 在线电影av不卡网址| 国产成人在线亚洲欧美| 欧美在线免费视频| 中文字幕一区日韩电影| 裸体女人亚洲精品一区| 成人黄色免费网站在线观看| 国产精品91在线观看| 日韩大陆毛片av| 成人做爰www免费看视频网站| 国产精品久久久| 色婷婷久久一区二区| 欧美日韩高清在线观看| 亚洲精品免费av| 国产精品国产三级国产专播精品人| 亚洲男人7777| 国产91成人在在线播放| 久久视频在线播放| 午夜精品一区二区三区在线视| 97av在线播放| 国产精品久久网| 国产一区二区动漫| 亚洲天堂免费视频| 日韩女优在线播放| 亚洲精品一区二区在线| 国产精品亚洲综合天堂夜夜| 亚洲精品网址在线观看| 亚洲乱码一区av黑人高潮| 国产成人精品免费久久久久| 欧美国产亚洲精品久久久8v| 91精品国产乱码久久久久久久久| 精品亚洲aⅴ在线观看| 久久久91精品国产一区不卡| 中文字幕亚洲专区| 欧美精品免费在线| 久久精品国产亚洲7777| 欧美精品在线免费观看| 日韩中文字幕免费看| 精品国产一区二区三区久久| 亚洲国产精品热久久| 亚洲人精选亚洲人成在线| 伊人成人开心激情综合网| 91在线视频九色| 在线免费观看羞羞视频一区二区| 久久国产精品偷| 成人激情电影一区二区| 日本不卡高字幕在线2019| 国产中文欧美精品| 日本精品久久久久久久| 国产日韩欧美在线视频观看| 国产精品久久久久久亚洲影视| 日韩av网站电影| 国产精品久久久av久久久| 91av网站在线播放| 久久久av一区| 欧美激情精品久久久久久变态| 久久亚洲精品视频| 欧美亚洲在线观看| 久久av在线播放| 亚洲欧洲一区二区三区在线观看| 欧美精品中文字幕一区| 992tv成人免费影院| 草民午夜欧美限制a级福利片| 日韩电影免费在线观看| 欧美在线欧美在线| 性欧美在线看片a免费观看| 国产欧美日韩视频| 国产精品午夜视频| 久久成人亚洲精品| 日韩精品在线第一页| 欧美大片免费观看在线观看网站推荐| 亚洲一区制服诱惑| 成人精品一区二区三区电影黑人| 久久久久久亚洲精品不卡| 久久免费国产视频| 亚洲欧美中文日韩在线v日本| 亚洲成色777777在线观看影院| 日韩成人av网| 久久精品国亚洲| 久久久精品久久久久| 亚洲色无码播放| 欧美一级黄色网| 亚洲国产欧美一区二区丝袜黑人| 久久精品国产久精国产一老狼| 91亚洲午夜在线| 欧美电影在线播放| 亚洲欧美一区二区三区在线| 欧美性色视频在线| 亚洲天天在线日亚洲洲精| 国产精品久久不能| 亚洲人成在线电影| 国产精品日韩在线一区| 这里只有精品视频在线| 国产在线拍偷自揄拍精品| 亚洲一区中文字幕| 亚洲福利精品在线| 久久夜色精品亚洲噜噜国产mv| 欧美大片免费看| 亚洲专区在线视频| 日韩人体视频一二区| 色婷婷av一区二区三区久久| 亚洲三级av在线| 啊v视频在线一区二区三区| 永久免费看mv网站入口亚洲| 秋霞成人午夜鲁丝一区二区三区| 4388成人网| 九九久久久久99精品| 国产精品午夜国产小视频| 九九久久国产精品| 久久人人爽人人爽爽久久| 热re91久久精品国99热蜜臀| 国产精品2018| 97超级碰碰碰久久久| 欧美性猛交xxxx乱大交3| 日韩国产欧美精品在线| 亚洲日韩中文字幕在线播放| 91在线观看免费高清| 亚洲最新av网址| 亚洲视屏在线播放| 北条麻妃在线一区二区| 欧美激情第三页| 亚洲福利视频二区| 日韩免费av片在线观看| 亚洲天堂一区二区三区| 国产欧美日韩免费看aⅴ视频| 亚洲成人教育av| 欧美中文字幕第一页| 亚洲日韩第一页| 色噜噜狠狠狠综合曰曰曰88av| 欧美性黄网官网| 欧美日韩国产在线看| 亚洲一区二区在线| 亚洲欧洲在线播放| 久久99亚洲热视| 久久成人亚洲精品| 精品国产91乱高清在线观看| 中文日韩在线视频| 中文字幕在线观看日韩| 成人免费观看a| 国内揄拍国内精品少妇国语| 成人激情电影一区二区| 欧美性极品xxxx做受| 欧美日韩中文字幕日韩欧美| 国产精品揄拍一区二区| 亚洲乱码国产乱码精品精天堂| 在线中文字幕日韩| 中文字幕不卡在线视频极品| 欧美成人第一页| 亚洲美女av电影|