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인개발 인디게임입니다.
영어단어 공부를 즐겁게 게임을 하면서 할 수 있을까해서 후다닥 만들어봤습니다.
많은 관심과 좋은 평가 부탁드려요
'개발 > 앱' 카테고리의 다른 글
Cocos creator 설치 및 적응기 1탄 (0) | 2016.11.09 |
---|---|
Coco2dx 개발 코코스2d 배경화면 자동 스크롤하기 (슈팅게임 배경화면 스크롤) (0) | 2016.11.07 |
SPSS 대응표본 t-검증 손쉽게하기 (Paired sample t-test) (0) | 2016.11.07 |
SPSS 독립표본 t-검증 손쉽게하기 (Independent sample t-test) (0) | 2016.11.07 |
[1인개발 인디게임앱] 용사는 열공중 (영어단어공부편) (0) | 2016.10.28 |
1인개발 나도 금수저 게임 / 흙수저 키우기 / 흙수저에서 금수저로 (0) | 2016.10.04 |
킹덤러쉬프론티어 게임 플레이영상 / 게임공략 / 스테이지 8 / 별3개 획득 방법 (0) | 2016.09.30 |
대박앱 내일은 단어왕 영어단어편 / 영어단어 공부 저절로 된다잉 한번바바바바방 (0) | 2016.09.30 |
최근댓글