如何知道音乐文件是否播放完毕?

How to know if a music file has finished playing?

在 cocos2d-x 中,您可以通过执行以下操作来播放音乐:

auto audio = SimpleAudioEngine::getInstance();

// set the background music and play it just once.
audio->playBackgroundMusic("mymusic.mp3", false);

但是我们怎么知道音乐是否播放完毕呢?游戏可能会被 phone 调用中断(触发暂停游戏和音乐的其他代码)或被用户暂停。

有没有办法知道文件是否播放完毕?我知道我们可以保留某种计时器来跟踪歌曲播放的持续时间,但这看起来很老套,这是一个常见的用例,尤其是当我们想要对播放列表进行排队时。

看来您必须在 update() 方法中测试 audio->isBackgroundMusicPlaying()

应该有一个委托,或者其他某种回调,它会告诉你这样的事情。我想你可以子类化 SimpleAudioEngine 来添加这个。

EDIT experimental::AudioEngine 提供 didFinishCallback:

static void setFinishCallback(int audioID, const std::function<void(int, const std::string &)> &callback);

但是您需要注意,我认为它不支持所有平台,因此请谨慎使用。