창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
MIDI 음악을 메인 루프 앞에서 재생시킨 후
다른 음악을 재생시키려고 했더니 그 다음부턴 음악이 정지만 하고 재생이 되지를 않네요.
예전에 배고파요 만들었을 때는 비슷하게 해도 별 문제가 없었던 것 같은데, 왜 이러는지 잘 모르겠습니다.
void bgm(int flag)
{
_MidiStop();
if(flag == 0){
_MidiPlay("title.mid", true);
}else if(flag == 1){
_MidiPlay("goor.mid", false);
}
}
int main(char* arg[])
{
//창 생성
if(!MainInitialize("미시세계의 아름다움", TRUE, FALSE, false))return 0;
//윈도우창 이동
if(window_mode)
{
jdd->OnMove(100, 100);
SetCursor(LoadCursor(0, IDC_ARROW));
}
JPictureInfo jpi;
jpi.SetColorKey(JColor(0,0,255));
jdd->LoadPicture("title", "title.bmp", &jpi, true);
jdd->LoadPicture("bg", "bg.bmp", &jpi, true);
int state = 0;
bgm(state);
//메인 실행
while(!GetKey(vkey_esc))
{
if(!ProcessMessage())break;
if(state == 0){
jdd->DrawPicture(backbuffer, "title", 0, 0, NULL);
if(GetKey(vkey_enter)){
state++;
}
}else if(state == 1){
bgm(state);
state++;
}else if(state == 2){
jdd->DrawPicture(backbuffer, "bg", 0, 0, NULL);
}
jdd->Render();
}
MidiStop이든 MidiPlay든 그 순간 명령이 먹히는 것이 아니라
명령이 들어간 후 다음 번의 ProcessMessage() 에서 명령이 처리됩니다.
즉, MidiStop() 뒤에 if(ProcessMessage())return; 을 넣어주시거나
state==1 에서 스톱 시키고 state==2에서 재생하고, 현재 state==2는 state==3으로 바꾸시는 방법이 있습니다.