cocos2d-x开发 之 声音引擎SimpleAudioEngine

SimpleAudioEngine是cocos2d-x中的声音引擎,它控制着在游戏中的声音。

而且它是一个全局静态类,至始至终只会有一个且全局能访问。

话不多说我们来介绍一下吧

要使用SimpleAudioEngine引擎当然得手动添加头文件啦

#include "simpleAudioEngine.h"
using namespace CocosDenshion;

因为它是一个单例模式设计的所以使用getinstance。

CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("music/bgm.mp3");//预加载音乐

BackGroundMusic是bgm也就是背景音乐的意思,preload是预加载的意思。

预加载的好处是,先加载文件,在后面用到时速度比读取要快很多,在大型游戏开发中预加载的优势会比直接读取要快很多。

预加载之后就可以随心所欲的用啦!

CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("music/bgm.mp3");
//开始播放音乐

CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
//暂停bgm音乐

CocosDenshion::SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
//继续bgm音乐

当然暂停和继续是基于开始播放了bgm音乐的,所以无需文件路径。

还有一些别的方法

virtual void rewindBackgroundMusic() //重新播放背景音乐。

virtual bool willPlayBackgroundMusic()  //判断背景音乐是否可以播放。

virtual bool isBackgroundMusicPlaying() //判断背景音乐是否在播放。

virtual float getBackgroundMusicVolume() //获取背景音乐音量。

virtual void setBackgroundMusicVolume(float volume) //设置背景音乐音量,值域[0.0f,1.0f]。 

在游戏当中我们按下某个按钮的时候也会有音效,攻击也会有音效,当然

SimpleAudioEngine也有控制音效的啦!

virtual float getEffectsVolume() //获取即时音效的音量。

virtual void setEffectsVolume(float volume) //设置即时音效的音量,值域[0.0f,1.0f]。 

virtual void preloadEffect(const char* pszFilePath)  //预加载音效,参数是文件路径。

virtual void unloadEffect(const char* pszFilePath) //卸载音效。

virtual unsigned int playEffect(const char* pszFilePath,bool bLoop=false,float pitch=1.0f,float pan=0.0f,float gain=1.0f) //播放即时音效,参数一是文件路径,参数二表示是否循环,参数三表示基因频率,参数四表示左右声道是否均衡,值域[-1,1],参数五表示音量衰减系数,值域[0.1]。

virtual void pauseEffect(unsigned int nSoundid) //暂停播放即时音效,参数为编号。

virtual void resumeEffect(unsigned int nSoundid) //继续播放即时音效,参数为编号。

virtual void stopEffect(unsigned int nSoundid) //停止播放即时音效,参数为编号。

virtual void pauseAllEffect() //暂停播放所有音效。

virtual void resumeAllEffect() //继续播放所有音效。

virtual void stopAllEffect() //停止播放所有音效

类方法参考了https://blog.csdn.net/GladiolusLai/article/details/52575222

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cocos2dx 雷电MoonWarriors_游戏源码 #include "GameLayer.h" #include "SimpleAudioEngine.h" #include "Bullet.h" #include "Resource.h" #include "Config.h" #include "Enemy.h" #include "Effect.h" #include "GameOver.h" #include "PauseLayer.h" using namespace cocos2d; using namespace CocosDenshion; bool isPaused = false; GameLayer::GameLayer():m_state(statePlaying),m_time(0),m_ship(NULL),m_backSky(NULL),m_backSkyHeight(0),m_backSkyRe(NULL),m_backTileMap(NULL),m_backTileMapHeight(0),m_backTileMapRe(NULL),m_isBackSkyReload(false),m_isBackTileReload(false),m_lbScore(NULL),m_lifeCount(NULL), m_tempScore(0) { } GameLayer::~GameLayer() { if (m_levelManager) { delete m_levelManager; } play_bullet->release(); enemy_bullet->release(); enemy_items->release(); } bool GameLayer::init() { if (!CCLayer::init()) { return false; } // 开启触摸 this->setTouchEnabled(true); // 创建数组,需要retain一下 play_bullet = CCArray::create(); play_bullet->retain(); enemy_bullet = CCArray::create(); enemy_bullet->retain(); enemy_items = CCArray::create(); enemy_items->retain(); m_state = statePlaying; Enemy::sharedEnemy(); Effect::sharedExplosion(); Config::sharedConfig()->resetConfig(); winSize = CCDirector::sharedDirector()->getWinSize(); m_levelManager = new LevelManager(this); //初始化背景 initBackground(); m_screenRec = CCRectMake(0, 0, winSize.width, winSize.height + 10); // score m_lbScore = CCLabelBMFont::create("Score:0", s_arial14_fnt); m_lbScore->setAnchorPoint(ccp(1, 0)); m_lbScore->setAlignment(kCCTextAlignmentRight); addChild(m_lbScore, 1000); m_lbScore->setPosition(winSize.width - 5, winSize.height - 30); // ship life CCTexture2D *shipTexture = CCTextureCache::sharedTextureCache()->addImage(s_ship01); CCSprite *life = CCSprite::createWithTexture(shipTexture, CCRectMake(0, 0, 60, 38)); life->setScale(0.6); life->setPosition(ccp(30,winSize.height-23)); addChild(life, 1, 5); // ship life count char lifecount[2]; sprintf(lifecount, "%d",Config::sharedConfig()->getLifeCount()); m_lifeCount = CCLabelTTF::create(lifecount, "Arial", 20); m_lifeCount->setPosition(ccp(60, winSize.height-20)); m_lifeCount->setColor(ccc3(255,0, 0)); addChild(m_lifeCount, 1000); // ship m_ship = Ship::create(); addChild(m_ship, m_ship->getZoder(), 1001); CCMenuItemImage *pause = CCMenuItemImage::create("pause.png", "pause.png", this, menu_selector(GameLayer::doPause)); pause->setAnchorPoint(ccp(1, 0)); pause->setPosition(ccp(winSize.width, 0)); CCMenu *menu = CCMenu::create(pause, NULL); menu->setAnchorPoint(ccp(0, 0)); addChild(menu, 1, 10); menu->setPosition(CCPointZero); // 调 update函数 scheduleUpdate(); // 每秒调一次 scoreCounter函数 schedule(schedule_selector(GameLayer::scoreCounter), 1); if (Config::sharedConfig()->getAudioState()) { SimpleAudioEngine::sharedEngine()->playBackgroundMusic(s_bgMusic, true); } return true; } void GameLayer::update(float dt) { if (m_state == statePlaying) { checkIsCollide(); removeInactiveUnit(dt); checkIsReborn(); updateUI(); } } void GameLayer::scoreCounter() { if (m_state == statePlaying) { m_time++; m_levelManager->loadLevelResource(m_time); } } void GameLayer::checkIsCollide() { CCObject *units; CCObject *bullets; CCObject *enemybs; CCARRAY_FOREACH(enemy_items, units) { UnitSprite *enemy = dynamic_cast<UnitSprite*>(units); CCARRAY_FOREACH(play_bullet, bullets) { UnitSprite *bullet = dynamic_cast<UnitSprite*>(bullets); if (this->collide(enemy, bullet)) { enemy->hurt(); bullet->hurt(); } if (!(m_screenRec.intersectsRect(bullet->boundingBox()))) { bullet->destroy(); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值