1

SFML 1.6に音楽の終わりを単独で処理させることは可能ですか?現在私はこれを持っています:

//in music.cpp
music.Play()

//in main.cpp
//on every frame check for end of music
if(music.getStatus() == Sound::Stopped)
    loadNextMusicFile();

SFMLには、これを自分で実装せずに、「音楽が停止するまで再生してから、次の音楽をロードする」とだけ言う方法はありませんか?または、少なくとも音楽が停止したときに気付くためのより「エレガントな」方法(OnStoppedイベントなど)はありますか?

4

1 に答える 1

3

Music.cppのコードを見ると

bool Music::OnGetData(SoundStream::Chunk& data)
{
    Lock lock(myMutex);

    // Fill the chunk parameters
    data.Samples   = &mySamples[0];
    data.NbSamples = myFile->Read(&mySamples[0], mySamples.size());

    // Check if we have reached the end of the audio file
    return data.NbSamples == mySamples.size();
}

ファイルの最後にある場合はfalseを返すことがわかります。

したがって、実行したいのはサブクラスsf::Musicです。例えば

class MyMusic : public sf::Music
{
   bool OnGetData(SoundStream::Chunk& data)
   {
       bool running = sf::Music::OnGetData(data);
       if(!running)
          OnMusicEnd();
       return running;
   }
public:
   void OnMusicEnd()
   {
       // ...
   }

};
于 2011-03-30T16:12:53.177 に答える