{{: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:메인메뉴를_키보드로_조작하기|메인메뉴를 키보드로 조작하기]]를 해볼 것이다.