#c #sdl-2 #audio-player
#c #sdl-2 #аудиоплеер
Вопрос:
Я пытаюсь сделать небольшую программу с SDL2 и C . В окне есть окно и кнопка. Я хочу сделать это, когда я нажимаю в первый раз, когда начинает воспроизводиться музыка кнопки. Да, я заставил это работать.
if((mouseX >= buttonRect.x amp;amp; mouseX < (buttonRect.x buttonRect.w)) amp;amp; (mouseY >= buttonRect.y amp;amp; mouseY < (buttonRect.y buttonRect.h))){
if(event.button.button == SDL_BUTTON(SDL_BUTTON_LEFT)){
if(Mix_PlayingMusic() == 0){
Mix_PlayMusic(music, -1);
}
}
}
Но я хочу сделать так, чтобы при повторном нажатии кнопки музыка приостанавливалась. И если она будет нажата снова, она возобновится.
Я попробовал это:
if((mouseX >= buttonRect.x amp;amp; mouseX < (buttonRect.x buttonRect.w)) amp;amp; (mouseY >= buttonRect.y amp;amp; mouseY < (buttonRect.y buttonRect.h))){
if(event.button.button == SDL_BUTTON(SDL_BUTTON_LEFT)){
if(Mix_PlayingMusic() == 0){
Mix_PlayMusic(music, -1);
}else{
if(Mix_PausedMusic() == 1){
Mix_ResumeMusic();
}else{
Mix_PauseMusic();
}
}
}
}
Но это не сработает. Когда я нажимаю кнопку, музыка запускается и мгновенно останавливается. Если я удерживаю нажатой кнопку мыши на кнопке, будет воспроизводиться музыка, но если я перемещаю мышь, она останавливается.
Ответ №1:
Mix_PlayMusic возвращает 0 при успешном завершении или -1 при ошибках. Попробуйте определить статическую переменную, чтобы следить за состоянием проигрывателя;
if((mouseX >= buttonRect.x amp;amp; mouseX < (buttonRect.x buttonRect.w)) amp;amp; (mouseY >= buttonRect.y amp;amp; mouseY < (buttonRect.y buttonRect.h))){
static int STATE = 0; // not played
if(event.button.button == SDL_BUTTON(SDL_BUTTON_LEFT)){
if(STATE == 0){
Mix_PlayMusic(music, -1);
STATE = 1; // playing music
}else{
if(STATE == 2){
Mix_ResumeMusic();
} else {
Mix_PauseMusic();
STATE = 2; // paused
}
}
}
}