2017-12-19 10 views
0

SDLを使用して簡単なゲームを作成し、プログラムの最初からバックグラウンドで音楽を再生していますが、音楽が停止したときに次のトラック開始することができます。私はSDL_mixerライブラリを使って音楽を読み込んで再生しています。SDL2で再生する音楽を確認する

bool loadTrack() 
{ 
    song = Mix_LoadMUS("backgroundmusic.mp3"); 
    if (song == NULL) 
    { 
     return false; 
    } 
    else 
    { 
     Mix_PlayMusic(song, -1); 
     return true; 
    } 
} 

私は音楽と呼ばれる作られたクラスで音楽をロードしてプレイしてるが、曲はNULLとしてクラスのコンストラクタで定義され、それにトラック名を与えると、そのクラスに「loadTrack」方法でそれを再生。クラス内で呼び出すことのできる別のメソッドを使いたいと思います。トラックが再生を終了するとtrueを返し、再生中はfalseを返します。私の問題は、トラックがまだ再生されているかどうか、またはミキサーライブラリにまだ再生中かどうかをチェックするための独自の機能があるかどうかをチェックする方法がないということです。

答えて

0

SDL_Mixerには、音楽が再生されているかどうかを確認するためにMix_PlayingMusic()があります。しかし、-1をMix_PlayMusicに渡すので、ループして永久に再生し、決して停止しません。

-1の代わりに1(1回再生)をMix_PlayMusicに渡すことで、曲を手動で再開できると思います。次にメインループで、次のフレームに進む前に、音楽の再生が停止しているかどうかを確認してください。もう一度やり直すか、別の音楽を再生してください。しかし、これにより、再起動(ゲームが60fpsで実行されている場合は約1フレーム時間~60分の1秒)ごとに小さな静寂のギャップが発生します。したがって、単純に音楽をシームレスにループさせたい場合は、SDL_Mixerでこれを手作業で行うのではなく、そうするようにしてください。

+0

私が必要としていた正確な答えは、今日後で家に帰るときに試してみる – Bananas88

関連する問題