我尝试使用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
}
}
}
}
关于c++ - 为什么我的按钮不能正常工作? SDL2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39999304/