Cocos2dx SimpleAudioEngine


코코스2dx 사용시 배경음과 효과음을 구현하는 코드입니다.

서비스 클래스를 하나 만들어서 사용하면 개발할때 다른 Scene이나 Layer, Node 등 제약없이 호출해서 사용할 수 있으니 여러모로 편리합니다.  저는 Cocos2dx에서 제공하는 SimpleAudioEngine을 사용합니다.


제가만든 서비스 클래스에서는 총 4가지 함수가 있는데 

배경음을 재생하는 함수, 

효과음을 재생하는 함수,

배경음 소리 크기를 변경해주는 함수,

효과음 소리 크기를 변경해주는 함수.


이렇게 있습니다.


헤더파일입니다. (이름은 SoundMngt.h 라고 지었습니다.)


#pragma once

#include "cocos2d.h"


using namespace std;


class SoundMngt

{

public:

SoundMngt();

~SoundMngt();


// Singleton object

static SoundMngt& getInstance();

static void releaseInstance();

static SoundMngt* m_pInstance;


public:

void PlayBgm(const int &iBgmId);

void PlayEffect(const int &iEffectId); 

        void setBgmVolume(const float &iVolume);

        void setEffectVolume(const float &iVolume);


private:

   enum { EFFECT_HIT, EFFECT_LEVEL_UP, EFFECT_CLICK };

   enum { BGM_INTRO, BGM_BATTLE, BGM_MAIN };

};



소스파일입니다.  (이름은 SoundMngt.cpp 라고 지었습니다.)

#include "SoundMngt.h"


//---------------------------------------------------------------- cocos2dx API

#include "audio\include\SimpleAudioEngine.h"

using namespace CocosDenshion;


SoundMngt *SoundMngt::m_pInstance = nullptr;


//-----------------------------------------------------------------------------

//Destructor : SoundMngt

//-----------------------------------------------------------------------------

SoundMngt::SoundMngt()

{

   // set default volume

SimpleAudioEngine::getInstance()->setEffectsVolume(0.5f);

SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(0.5f);


        // pre load bgm resource

SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/bgm_1.mp3");

SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/bgm_2.mp3");

SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/bgm_3.mp3");


        // pre load effect resource

SimpleAudioEngine::getInstance()->preloadEffect("sound/effects/click.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("sound/effects/level_up.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("sound/effects/hit.mp3");

}


//-----------------------------------------------------------------------------

//Destructor : ~SoundMngt

//-----------------------------------------------------------------------------

SoundMngt::~SoundMngt()

{

}


//-----------------------------------------------------------------------------

// getInstance

//-----------------------------------------------------------------------------

SoundMngt& SoundMngt::getInstance()

{

if (m_pInstance == nullptr)

m_pInstance = new SoundMngt();


return *m_pInstance;

}


//-----------------------------------------------------------------------------

// releaseInstance

//-----------------------------------------------------------------------------

void SoundMngt::releaseInstance()

{

if (m_pInstance != nullptr)

delete m_pInstance;

}


//-----------------------------------------------------------------------------

// PlayBgm

//-----------------------------------------------------------------------------

void SoundMngt::PlayBgm(const int &iBgmId)

{

if (iBgmId == BGM_INTRO)

SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/bgm_1.mp3", true);

else if (iBgmId == BGM_BATTLE)

SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/bgm_2.mp3", true);

else if (iBgmId == BGM_MAIN)

SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/bgm_3.mp3", true);

}


void SoundMngt::PlayEffect(const int &iId)

{

switch (iId)

{

case EFFECT_CLICK:

SimpleAudioEngine::getInstance()->playEffect("sound/effects/click.mp3");

break;

case EFFECT_LEVEL_UP:

SimpleAudioEngine::getInstance()->playEffect("sound/effects/level_up.mp3");

break;

case EFFECT_HIT:

SimpleAudioEngine::getInstance()->playEffect("sound/effects/hit.mp3");

break;

}

}


void SoundMngt::setBgmVolume(const float &iVolume)

{

SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(iVolume);

}


void SoundMngt::setEffectVolume(const float &iVolume)

{

SimpleAudioEngine::getInstance()->setEffectsVolume(iVolume);

}




이렇게 SoundMngt 클래스를 하나 생성했습니다.

이제 이 클래스를 필요한 곳에서 include 해서 사용할 일만 남았습니다.


사용방법은 다 아실꺼지만 적어볼께요.


#include "SoundMngt.h"


void MainScene::playBgm()

{

SoundMngt::getInstance().PlayBgm(BGM_MAIN);

}


void MainScene::playerUnderAttack()

{

SoundMngt::getInstance().PlayEffect(EFFECT_HIT);

}



요런식으로 사용하면됩니다. 즐거운 코딩되세요^^







https://play.google.com/store/apps/details?id=com.eyen.puzzlego





요걸 사용해서 만들어본 1인개발 인디게임입니다. 

영어단어 공부를 즐겁게 게임을 하면서 할 수 있을까해서 후다닥 만들어봤습니다. 

많은 관심과 좋은 평가 부탁드려요