是否有可能让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事件)?
答案 0 :(得分: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。 e.g。
class MyMusic : public sf::Music
{
bool OnGetData(SoundStream::Chunk& data)
{
bool running = sf::Music::OnGetData(data);
if(!running)
OnMusicEnd();
return running;
}
public:
void OnMusicEnd()
{
// ...
}
};