第一个问题,Cocos2dx的音频功能略简陋,于是也提供了让诸位造轮子的可能性:),撸主想避免同一个音频被覆盖播放的问题,我想可以做成:不允许播放一个正在播放的音频。
1.建立一个std::map<int,float>//音频ID,音频时长。每次播放音效时,先在该map中查找ID是否存在:如果已存在,表示已经播放,直接return掉;如果不存在,播放之,同时插入map。
2.在update(float fDelta)中遍历1里定义map,如果“音频时长”<=0.0f,将这个元素从map里删掉;如果>0.0f,将“音频时长”变量自减fDelta。
无聊再附上C++伪代码,若有误导还请撸主海涵:
1.void playAudio(int iID, float fDuration)
{
std::map<int,float>::iterator it = mMapAudioPlaying.find(iID);//std::map<int,float> mMapAudioPlaying;
if(it!=mMapAudioPlaying.end())
return;
mMapAudioPlaying.insert(std::make_pair(iID, fDuration));
//todo,调用cocos2dx的播放音频接口
}
2.void update(float fDelta)
{
std::map<int,float>::iterator it = mMapAudioPlaying.begin();
while(it!=mMapAudioPlaying.end())
{
if(it->second <= 0.0f)
{
mMapAudioPlaying.erase(it++);
continue;
}
it->second -= fDelta;
++it;
}
}
另外吐个槽,因为没发现cocos2dx有音频播放结束的回调,所以只能手动侦测每个音频的时长- -|||