我尝试使用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/

10-11 23:04
查看更多