2016-10-12 17 views
1

私はSDL2とC++で少しのプログラムを作ろうとします。ウィンドウにはウィンドウとボタンがあります。私は最初にボタン・ミュージックが始まるときにそれをやりたがっています。うん、私はそれを働かせました。なぜ私のボタンが正しく動作しないのですか? SDL2

しかし、ボタンを2回押すと音楽が一時停止するようにしたいと考えています。そして、もう一度押すと、それは再開します。

私はこの試みた:

  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(); 
         } 
        } 
       } 
      } 

をしかし、それは動作しません。ボタンを押すと音楽が瞬時に始まり停止します。もし私がマウスボタンを押したままにすると、音楽は再生されますが、マウスを動かすと止まります。

答えて

1

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 
         } 
        } 
       } 
      } 
関連する問題