게임에서 사운드는 꼭 필요한 요소입니다. 아무리 재미있는게임이라도 소리끄고 하면 재미가 반감되는건 해본 사람만 아는 사실이겠지용? Cocos2x로 게임이나 앱을 개발할때 사운드는 어떻게 구현하시나요? 저는 싱글턴 클래스(Singleton Class)로 만들어서 프로그램 코드 작성할때 언제 어디서건 불로 올 수 있도록 구현해서 사용한답니다.
싱글턴 클래스란 다들 아시죠? 단 하나의 인스턴스만 존재하게 만든 클래스인거, 자세한 내용을 알고 싶으시다면 검색창에서 '싱글턴 클래스' 혹은 'Singleton class'라고 검색하면 수많은 글들이 나올꺼에요. 그중에서 가장 쉽게 된거 찾아서 읽어보시면 되어요.
SoundMngt.h 파일
#pragma once
using namespace std;
//-----------------------------------------------------------------------------
// Type : SoundMngt
// Author : RYU
// Role : Managing sound effect here
//-----------------------------------------------------------------------------
class SoundMngt
{
public:
SoundMngt();
~SoundMngt();
// Singleton object
static SoundMngt& getInstance();
static void releaseInstance();
static SoundMngt* m_pInstance;
// attributes
public:
void PlayBGM();
void PlayClick();
void PlayHit();
void PlayIntro();
void StopBGM();
void StopEffect();
private:
static bool _isBGMPlaying;
};
SoungMngt.cpp 파일
/**
* full review 14:04:21 RYU : initial version
*/
//---------------------------------------------------------------------EWST API
#include "SoundMngt.h"
#include "Common.h"
//---------------------------------------------------------------- cocos2dx API
#include "audio\include\SimpleAudioEngine.h"
using namespace CocosDenshion;
SoundMngt *SoundMngt::m_pInstance = nullptr;
bool SoundMngt::_isBGMPlaying = false;
//-----------------------------------------------------------------------------
//Constructor : SoundMngt
//-----------------------------------------------------------------------------
SoundMngt::SoundMngt()
{
SimpleAudioEngine::getInstance()->preloadEffect("sound/click.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("sound/intro.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("sound/hit.mp3");
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/bgm.mp3");
SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(0.05f);
SimpleAudioEngine::getInstance()->setEffectsVolume(0.7f);
_isBGMPlaying = false;
}
//-----------------------------------------------------------------------------
//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()
{
if (_gBGMOn == 1)
{
if (_isBGMPlaying == false)
{
SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/bgm.mp3", true);
_isBGMPlaying = true;
}
}
else
{
StopBGM();
}
}
//-----------------------------------------------------------------------------
// PlayHit
//-----------------------------------------------------------------------------
void SoundMngt::PlayHit()
{
if (_gEffectOn == 1)
SimpleAudioEngine::getInstance()->playEffect("sound/hit.mp3");
}
//-----------------------------------------------------------------------------
// PlayClick
//-----------------------------------------------------------------------------
void SoundMngt::PlayClick()
{
if (_gEffectOn == 1)
SimpleAudioEngine::getInstance()->playEffect("sound/click.mp3");
}
//-----------------------------------------------------------------------------
// PlayIntro
//-----------------------------------------------------------------------------
void SoundMngt::PlayIntro()
{
if (_gEffectOn == 1)
SimpleAudioEngine::getInstance()->playEffect("sound/intro.mp3");
}
//-----------------------------------------------------------------------------
// StopBGM
//-----------------------------------------------------------------------------
void SoundMngt::StopBGM()
{
SimpleAudioEngine::getInstance()->stopBackgroundMusic();
_isBGMPlaying = false;
}
//-----------------------------------------------------------------------------
// StopEffect
//-----------------------------------------------------------------------------
void SoundMngt::StopEffect()
{
SimpleAudioEngine::getInstance()->stopAllEffects();
}
물론 규모가 큰 프로젝트에서는 이렇게 사용안하겠지만, 제가 이 클래스를 사용한 게임은 코드가 1000줄 내외 였던지라, 대충 만들어서 사용했답니다.
'개발 > 앱' 카테고리의 다른 글
풋볼데이 '이달의 에이스팩' 뽑기결과 (0) | 2017.05.09 |
---|---|
'자동차 번호판 자동인식 알고리즘' 궁금했던 이야기 (0) | 2017.05.08 |
C# 현재프로젝트에 다른프로젝트 추가 하는방법 (2) | 2017.04.29 |
풋볼데이 첼시 '마르코스 알론소' 와 '은골로 캉테' 실전배치 완료 (0) | 2017.04.27 |
풋볼데이 첼시 라이브카드 '은골로 캉테' 뽑은 이야기 (2) | 2017.04.26 |
코코스2D 'ParticleExplosion' 를 이용한 폭발효과 구현하기 소스 (0) | 2017.04.25 |
풋볼데이 선수 프리미어팩 100개 뽑기 결과 (앗싸 첼시선수 두명 뽑았어요) (0) | 2017.04.18 |
[MoneyComeOn] 주식자동매매 - C# 에서 한글 변수명 사용 정말 괜찮을까요? (11) | 2017.04.17 |
최근댓글