iDev/Cocos2D

드래곤 플라이트 따라 만들기 - 10. 배경음악과 사운드 효과음

KraZYeom 2013. 2. 12. 07:46
반응형

게임에 있어서 가장 중요한 것들 하나가 배경음악이라고 생각이 든다. 애니팡도 그렇고 드래곤 플라이트도 그렇고 단순하면서 반복적인 배경음악이 게임에 몰입을 하고 중독을 일으키게 할 만큼 엄청나게 중요하다. 이번 파트에서는 배경음악과 사운드 효과의 재생을 구현해 보도록 하자. 


배경음악과 사운드 효과

cocos2d에서 배경음악과 사운드 효과는 SimpleAuidoEngine을 사용한다. 즉각 즉각 필요할 때 마다 메모리에 올려서 재생을 해도 상관은 없지만, 사운드의 경우에는 용량도 크고 해서 게임 시점에 메모리에 올릴경우 지연이 발생한다. 그래서 게임 초반에 preload를 사용하여 미리 메모리에 올려 놓고 필요할 때는 재생만 해서 사용한다. mp3, wav 등 다양한 형식의 음악 파일을 지원한다. 단, 너무 파일 크기가 크면 게임 구동에 문제가 있을수 있으니 삼가하도록 하자. 


게임 시작 시점에 preload를 하기 위해 AppDelegate.m 로 이동한다. application:didFinishLaunchingWithOptions: 메소드의 가장 아래부분에 아래와 같이 코드를 추가한다.  

(* 배경 음악 및 효과음은 저작권 문제로 첨부하지 못하였습니다. 적절한 음악 및 효과음을 찾으면 추가하도록 하겠습니다.)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

...

    // 배경음악을 위한 음악

    [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"background_music.mp3"];

    // 적이 죽을 경우을 위한 사운드 효과

    [[SimpleAudioEngine sharedEngine] preloadEffect:@"mon_die.wav"];

    // 적이 피해를 입었을 경우을 위한 사운드 효과

    [[SimpleAudioEngine sharedEngine] preloadEffect:@"mon_damage.wav"];

  return YES;

}

각각의 상황에 따른 음악 및 효과 파일을 싱글톤을 사용하여 preload 한다. 배경음악의 경우에는 preloadBackgroundMusic를 사용하여 preload를 하고, 사윤드 효과의 경우에는 preloadEffect를 사용하여 preload 한다.


배경음악 및 효과음 재생을 구현하기 위해서 GameLayer.m 으로 이동한다. 그리고 SimpleAudioEngine을 사용하기 위해서 아래와 같이 헤더 파일을 임포트한다. 

#import "SimpleAudioEngine.h"


게임이 실행되면 바로 배경음악을 재생하기 위해서 onEnter 메소드의 마지막에 아래와 같이 코드를 추가한다.

- (void)onEnter {

    [super onEnter];

...

    //시작 되면 배경 백그라운드 음악이 재생

    [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"background_music.mp3" loop:YES];

}

싱글톤으로 SimpleAudioEngine이 만들어져서 어디서나 접근을 할 수가 있다. 음악 재생을 위해서 playBackgroundMusic 메소드를 사용하여 배경음악을 재생하고 계속적으로 반복을 위해서 loop값을 YES로 설정한다. 

그리고 충돌시 일어나는 효과음을 구현하기 위해서 update: 메소드의 충돌이 일어나는 부분에 아래 코드를 추가한다. 

- (void)update:(ccTime)dt {

...

            //총알과 적이 충돌이 나는지를 체크

            if (!isCollision && CGRectIntersectsRect(bullet.boundingBox, enemy.boundingBox)){

...

                //싸운드 효과를 재생한다.

                [[SimpleAudioEngine sharedEngine] playEffect:@"mon_damage.wav"];

                //미사일로 적을 공격해서 0점을 받아오는지를 체크

                if (![enemy attackedWithPoint:[bullet bulletType]]){

                    //싸운드 효과를 재생한다.

                    [[SimpleAudioEngine sharedEngine] playEffect:@"mon_die.wav"];


                    //적이 폭발되면 먼지를 뿌려주기위한 노드 생성

                    Dust *dust = [Dust node];

...

}

배경음악과 마찬가지로 싱글톤으로 SimpleAudioEngine이 만들어져서 어디서나 접근을 할 수가 있다. 효과음 재생을 위해서  배경음악 재생과 다른 playEffect 메소드를 사용하여 효과음을 한번만 재생한다. 총알과 적이 충돌 했을 경우와 적이 폭발하는 경우의 각각의 효과음을 재생하도록 한다. 

Cmd(⌘) + R을 눌러서 실행을 해보자.

게임이 시작되면 배경음악이 재생되고 총알과 적이 충돌이 되었을 때, 적이 죽었을 때의 경우 모두 효과음이 나오는 것을 확인 할 수 있다.


이로서 드래곤 플라이트 따라 만들기 (손)연재가 모두 끝났다. 따라하면서 느꼈겠지만 크게 어려움이 없을 것이다. 물론 게임 개발을 엔진부터 개발을 하면 엄청나게 어려움이 있을 것이다. 하지만 뛰어난 개발자분들 께서 좋은 게임 엔진을 많이 만들어 놨고, 우리들은 그냥 그것을 사용해서 만들면 된다. :-) 겨우 약 600줄로 게임을 만들수 있다. (주석 포함 1200줄) 코딩을 할 수 있으면 누구나 도전을 했으면 하는 바람이다. 

게임에 대해 전혀 모르는 저도 했으니 여러분들 또한 전혀 문제가 없을 겁니다. 다른 시리즈로 조만간 찾아 오겠습니다.
그리고 '모바일 게임 따라 만들기 시리즈'로 조만간 eBook 형태로도 찾아뵙겠습니다. :-)  커피숍에서 코딩 할 수 있게 많은 도움 부탁드립니다. 꾸벅. 

반응형