막상 메뉴를 해놓고 보니까 소리가 없어서 먼가 및및하더군요 .
타격감이 없다고 해야 하나 . 그래서 다른것 하기전에 이것부터 할려구요
바로 싸운드 음..예제 소스 부터 보실래요 ^^?
그냥 쭈욱 한번 보세요 ㅎㅎ
진짜 별거 없죠 ㅎㅎㅎㅎ
그럼 일단 싸운드 정리 부터 할까요?
cocos2d는 게임을 의해 만들 라이브러리 라고 해도 과언이 아니겟죠 ? ^^
자 그럼 게임에 싸운드가 나오는 경우가 2가지 있습니다.
바로 배경음악과 효과음
2가지로 나누어 집니다.
cocos2d 그래서 언듯생각한것이 2가지 클래스가 따로 있나 싶었는데
바로 SoundEngine 바로 여기서 2가지를 전부 관리 하더군요.
실제 코드에서 쓰인 부분은 간단 합니다.
첫번째 로 백그라운드음악 설정할때
public void onEnter() {
super.onEnter();
SoundEngine.sharedEngine().playSound(app, R.raw.backsound, true);
}
바로 이부분입니다. 오호 저기또 share 란 접미사가 붙어있는거 보니 싱클톤이네요
첫번째 인자는 Context
두번째 인자는 Raw 폴더에 있는 파일이름
세번째는 반복재생 할건지 말건지 입니다.(배경음 이니까 당연히 무한 반복 들어값니다.)
그리고 효과음입니다.
효과음이 필요한곳에다가
SoundEngine.sharedEngine().playEffect(app, R.raw.effect);
요렇게만 쓰면 됩니다.
첫번째 인자값은 컨택스트
구번째 인자값은 Raw 폴더에 있는 파일입니다.
진짜 초간단하죠 ㅎㅎㅎㅎ 너무 간단해서 어이가 없을 지경입니다.
홈피에서는 5초이상 쓰이는건 미디어 플레이어 쓰고 3초 이하 정도면
이펙트를 사용하는것을 추천합니다.
자이제 간단하게 사용하법 법을 보았습니다.
일단 비교 대상이 2개뿐이니까 이번엔 표로 한번 정리해볼까요?
배경음악 | 효과음 | |
안드로이드와 연관성 | MediaPlayer사용 | soundpool 사용 |
적용시점 | 화면이 있을때 | 사용자의 반응에 대해서 |
끝나는 시점 | 어플종료 / 화면이 안보일때 | 일회성이므로 사용후바로 끝 |
배경음악의 시작시점을 보겟습니다 이건 어디서 알수 있을까요?
CCNode 관련 클래스가 화면에 나타날때(생성될 때) onEnter() 함수가 호출됩니다. Layer도 레이어니까 CCNode 클래스를 상속받았으니 OnEnter() 함수롤 오버라이드 한 바로이곳에서 배경음악을 실행합니다.
배연음악은 언제 안들리게 해야 하나요?
어플이 종료되었을때 와 어플이 화면에서 안보일때(background) 입니다. 그리고 커스텀하게 해당 레이어가 없어지거나 안보일때 입니다.
일단 레이어가 화면에서 사라지거나 어플이 background로 들어가는 것은 사용자 입장에서는 같다고 할 수 있습니다. 그럼 이때 일시정지를 하고 어플이 종료될때는 Mediaplayer를 realease 해줍니다. 그럼 레이어가 사라질때 호풀되는 함수가 먼고하니 바로
OnExit()입니다 여기에 바로 일시정지를 넣어줍니다.
그리고 어플이 종료될때 OnDestroy 입니다.여기서종료해 주는거죠 ]
cocos2d에 있는 예제는 워낙 단순하여(한개의레이어) 커스텀한경우는 없네요
차후 실제 게임 만들기 강좌에서 보다 자세히 다룰께요.
자 이번엔 효과음입니다. 효과음은 언제 이루어질까요?
사용자가 디바이스 어떤 동작을 취할때 입니다. 그때 호출되는 콜백 함수에
사용하면 됩니다. 보통 터치 이벤트가 발생했을때 사용됩니다.
public boolean ccTouchesBegan(MotionEvent event) {
SoundEngine.sharedEngine().playEffect(app, R.raw.effect);
return CCTouchDispatcher.kEventHandled;
이건데요 일단 Layer가 터치를 받을때 화면에 누르는 순간에 저함수가 호출됩니다.
아 참고로 안드로이드 사용할때 보면 soundpool을 좀세부적으로사용하는
아직 cocos2d에서는 그걸 컨트롤하는 함수가 아직 지원되지 않습니다. 이는 추후에 보완되겟죠 .
오늘은 sound 에 대해서 간단히 진짜 간단히 보았네요 . 추후강좌에서는 좀더 세부적으로 다룰수 있도록 해보겟습니다. 일단 오늘은 요까지만.