导致问题的位置:cocos2d-js-for-preview.js的4799行,recycleAudio这个方法。
这个方法大概是为了重复快速利用已经生成的audio实例吧,但是在清除实例原有的配置时,漏掉了_finishCallback的清除,导致,使用时,只要给某个音频加了结束回调,后面再播放音频,都会调用这个结束回调,除非用户代码play音频后,马上来个setFinishCallback(id, null)。
我觉得recycleAudio方法改修正成下面的样子:
var recycleAudio = function(audio) {
if (_audioPool.length < 32) {
audio.off("ended");
audio.off("stop");
audio.src = null;
audio._finishCallback = null; // 这里是添加的修正代码
_audioPool.push(audio);
} else audio.destroy();
};