{{:raylib:플래피버드그림입히기.png?600|플래피 버드 그림 입히기}} ~~stoggle_buttons~~ ===== 스타팅 파일 ===== * [[raylib:flappybird:flappy_bird_게임에_그림_입히기|Flappy Bird에 그림 입히기]]에서 이어지는 강의다. * {{ :raylib:flappybird_4.zip |Flappy Bird에 그림입히기 파일}}을 다운 받아서 프로젝트를 시작하자. ===== 오디오 기본 : 점프 효과음 만들기 ===== 위 스타팅 프로젝트 파일에는 에셋폴더에 jump.wav라는 효과음이 첨부되어 있다. 이를 이용할 것이다. ==== 1. 오디오 디바이스 연결하기와 연결 끊기 ==== main.cpp에서 게임창을 초기화하였으므로 바로 이어서 오디오도 초기화하자 === 가. 오디오 초기화 === main.cpp에서 게임창을 만든 직후에 오디오를 초기화하자 // 게임창 만들기 SetTargetFPS(60); // Set our game to run at 60 frames-per-second InitWindow(screenWidth, screenHeight, "Flappy Bird"); // 오디오 디바이스 초기화하기 InitAudioDevice(); // Initialize audio device === 나. 오디오 닫기 === CloseWindow() 바로 전에 오디오를 닫는 함수를 부르자. while문이 종료된 다음에 불러와야 할 것이다. CloseAudioDevice(); // Close audio device CloseWindow(); // Close window and OpenGL context return 0; ==== 2. 사운드 선언 및 실행 ==== === 가. bird.h === bird.h에 다음과 같이 점프에 사용할 사운드를 선언한다. Sound fxJump; // Load WAV audio file === 나. wave파일 할당하기 === bird.cpp에서 Init문에서 사용할 wave파일을 할당하면 된다/ void Bird::Init() { // 최초의 포지션 정하기 pos = {150, float(GetScreenHeight()) / 2} ; // 그림으로 넣기 birdImage = LoadTexture("Assets/birddrawing.png"); // Texture loading fxJump = LoadSound("Assets/jump.wav"); } === 다. 사운드 파일 메모리에서 해제 하기 === 끝나면 사운드 파일을 메모리에서 해제하는 것을 잊지 말자 Bird::~Bird() { UnloadTexture(birdImage); // Texture unloading UnloadSound(fxJump); // Unload sound data } === 라. 사운드 사용하기 === PlaySound()함수를 사용하면 된다. 쉽다. void Bird::Jump() { downSpeed = -jumpSpeed; PlaySound(fxJump); // Play WAV sound } ==== 3. 활용 ==== 이제 이것을 활용하여 플레이어가 장애물에 부딪히면 다치는 사운드도 만들어 보자. 그런데 Assets폴더에는 mp3로 되어 있다. 이것은 [[https://convertio.co/kr/mp3-wav/|ConvertIO]]와 같은 변환사이트에서 변환하면 된다. 변환한 후에 해당 wav파일을 위와 똑같이 PlaySound()함수로 활용하면 된다. 이런 식으로 나머지 효과음도 집어 넣자. 나는 이렇게 코딩했다. // 플레이어가 데미지를 입는 메서드 void Bird::Hurt() { Life--; SetInvincible(true); if (Life > 0) PlaySound(fxHurt); else PlaySound(fxExplosion); } ===== 음악 연주하기 ===== mp3를 연주하는 것도 그리 어려운건 아니다. 참고한 음악 파일은 Raylib의 예제파일 중에서 가져왔다. 출처 : [[https://github.com/raysan5/raylib/blob/master/examples/audio/resources/country.mp3|음악예제파일]] ==== 1. 음악 파일 선언 ==== game.h에 음악파일을 선언한다. Music music; ==== 2. 음악 할당하기 ==== game.cpp에서 Init()함수 내에 다음과 같이 음악을 할당한다. // 배경음악 플레이 할당하기 music = LoadMusicStream("Assets/country.mp3"); PlayMusicStream(music); ==== 3. 메모리 해제하기 ==== 다음을 항상 잊지 말자 Game::~Game() { UnloadTexture(backgroundImage); UnloadMusicStream(music); // Unload music stream buffers from RAM pipes.clear(); } ==== 4. 뮤직 스트림 업데이트 하기 ==== Update()루프에서 Switch 문 위에 다음과 같이 뮤직 스트림을 업데이트 하는 함수를 실행한다. 이래야만 음악이 연주된다. // Update UpdateMusicStream(music); // Update music buffer with new stream data ==== 4. 음악 일시정지와 재개 ==== ResumeMusicStream() 함수와 PauseMusicStream() 함수를 이용하면 된다. === 가. 정지 스위치 문 === case Gamestate::pause : // 정지로직 if (IsKeyPressed(KEY_UP)) { gamestate = Gamestate::game; // 게임으로 돌아가기 ResumeMusicStream(music); } if (gamestate == Gamestate::pause && IsKeyPressed(KEY_ESCAPE) ) Manager->gameExit = true; // 정지상태일때, ESC 누르면 종료 break; === 나. 게임 진행 스위치 문 === 다음과 같이 ESC키를 누르면 일시정지 함수를 불러오면 된다. case Gamestate::game : // 게임로직 // 키보드 입력 if (IsKeyPressed(KEY_ESCAPE)) { gamestate = Gamestate::pause; // 게임정지로 바꾸기 PauseMusicStream(music); } ===== 결론 ===== 오늘은 배경음악과 효과음을 해봤다. 오늘은 그리 어려운 것은 없어 보인다. 지금까지의 소스파일은 다음과 같다. {{ :raylib:flappybird_5.zip |Raylib 플래피버드 - 오디오 다루기}} 다음번에는 [[raylib:flappybird:메인메뉴를_키보드로_조작하기|메인메뉴를 키보드로 조작하기]]를 해볼 것이다.