Я пытаюсь сделать небольшую программу с SDL2 и C ++. Есть окно и кнопка на окне. Я хочу сделать это, когда я нажимаю кнопку в первый раз, и начинает играть музыка. Да, я заставил это работать.
if((mouseX >= buttonRect.x && mouseX < (buttonRect.x + buttonRect.w)) && (mouseY >= buttonRect.y && 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 && mouseX < (buttonRect.x + buttonRect.w)) && (mouseY >= buttonRect.y && 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();
}
}
}
}
Но это не сработает. Когда я нажимаю кнопку, музыка начинается и останавливается мгновенно. Если Если я удержу кнопку мыши на кнопке, музыка будет воспроизводиться, но если я переместлю мышь, она остановится.
Mix_PlayMusic возвращает 0 в случае успеха или -1 в случае ошибки.
Попробуйте определить статическую переменную, чтобы следить за состоянием игрока;
if((mouseX >= buttonRect.x && mouseX < (buttonRect.x + buttonRect.w)) && (mouseY >= buttonRect.y && 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
}
}
}
}
Других решений пока нет …