include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
//根据不同平台使用预编译索引不同音频文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#define EFFECT_FILE "effect2.ogg"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
#define EFFECT_FILE "effect1.raw"
#else
#define EFFECT_FILE "effect1.wav"
#endif
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#define MUSIC_FILE "music.mid"
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY)
#define MUSIC_FILE "background.ogg"
#else
#define MUSIC_FILE "background.mp3"
#endif
std::string items[] = {"播放背景音乐" ,"停止背景音乐" ,"暂停背景音乐" ,"继续播放背景音乐" ,"后退背景音乐" ,"背景音乐是否正在播放", "播放音效", "重复播放音效"
,"停止音效播放", "释放音效" ,"增加背景音乐音量" ,"减少背景音乐音量" ,"增加音效音量" ,"减少音效音量","暂停音效 ","继续播放音效" ,"暂停所有音效" ,"继续所有音效"
,"停止所有音效"};
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCMenu* m_pItmeMenu = CCMenu::create();
CCSize s = CCDirector::sharedDirector()->getWinSize();
int m_nTestCount = sizeof(items)/sizeof(items[0]);
for(int i = 0; i < m_nTestCount; i++)
{
CCLabelTTF* label = CCLabelTTF::create(items[i].c_str(), "Arial", 15);
CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::menuBack));
pMenuItem->setPosition(CCPointMake(s.width*0.5, s.height - 20 - (i+1)*15));
m_pItmeMenu->addChild(pMenuItem, i);
}
m_pItmeMenu->setPosition(CCPointZero);
addChild(m_pItmeMenu, 0 , 100);
//预加载音乐和音效
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE));
SimpleAudioEngine::sharedEngine()->preloadEffect(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE));
//设置默认音量
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);
SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);
return true;
}
//回调函数
void HelloWorld::menuBack(cocos2d::CCObject *pSender)
{
CCMenuItem* pMenuItem = (CCMenuItem*) pSender;
int nIdx = pMenuItem->getZOrder(); //得到z轴坐标
switch (nIdx) {
case 0:
//播放背景音乐
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE)).c_str(), true);
break;
case 1:
//停止背景音乐
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
break;
case 2:
//暂停背景音乐
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
break;
case 3:
//继续播放背景音乐
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
break;
case 4:
//后退背景音乐
SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
break;
case 5:
//背景音乐是否正在播放
if(SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())
{
CCLOG("背景音乐正在播放");
}else{
CCLOG("背景音乐没有在播放");
}
break;
case 6:
//播放音效,并且得到此音效的ID
effectID = SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str());
CCLOG("音效ID是%d",effectID);
break;
case 7:
//重复播放音效,并且得到此音效的ID
effectID = SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str(),true );
CCLOG("音效ID是%d", effectID);
break;
case 8:
//停止播放音效
SimpleAudioEngine::sharedEngine()->stopEffect(effectID);
break;
case 9:
//释放音效
SimpleAudioEngine::sharedEngine()->unloadEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str());
break;
case 10:
//增加背景音乐音量
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() + 0.1f);
break;
case 11:
//减少背景音乐音量
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() - 0.1f);
break;
case 12:
//增加音效音量
SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() + 0.1f);
break;
case 13:
//减少音效音量
SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() - 0.1f);
break;
case 14:
//暂停音效
SimpleAudioEngine::sharedEngine()->pauseEffect(effectID);
break;
case 15:
//继续播放音效
SimpleAudioEngine::sharedEngine()->resumeEffect(effectID);
break;
case 16:
//暂停所有音效
SimpleAudioEngine::sharedEngine()->pauseAllEffects();
break;
case 17:
//继续所有音效
SimpleAudioEngine::sharedEngine()->resumeAllEffects();
break;
case 18:
//停止所有音效
SimpleAudioEngine::sharedEngine()->stopAllEffects();
break;
}
}