1.6.0 CCAudioEngine 的几处代码疑问

你们好,下面是 1.6.0 里面的 CCAudioEngine 中的 setFinishCallback:

setFinishCallback: function (audioID, callback) {
        var audio = getAudioFromId(audioID);
        if (!audio)
            return;

        audio.off('ended');
        audio.on('ended', callback);
}

窃以为其中 audio.off('ended') 会引起在 getAudioFromPath 中的清理工作失败,如下:

var getAudioFromPath = function (path) {
    ...
    if (audioEngine._maxAudioInstance <= list.length) {
        var oldId = list.shift();
        var oldAudio = id2audio[oldId];
        oldAudio.stop();
    }

    audio = new Audio(path);
    var callback = function () {
        var id = this.instanceId;
        delete id2audio[id];
        var index = list.indexOf(id);
        cc.js.array.fastRemoveAt(list, index);
    };
    audio.on('ended', callback);
    audio.on('stop', callback);
    ...
};

还有另一个问题就是,setLoop 不需要判断 _loaded 之后处理吗类似 setVolume?

@panda 请问有人跟进吗,如果不修复的话,同一个音频多次播放就会出现因为清理不到导致触发数量上限,导致之前的音频被中断:

    ...
    if (audioEngine._maxAudioInstance <= list.length) {
        var oldId = list.shift();
        var oldAudio = id2audio[oldId];
        oldAudio.stop();
    }

谢谢反馈这个问题,确实如果是正常播放结束,就直接导致无法删除索引了。。。
稍后马上进行修复。

:joy:

1赞

不客气 反馈问题是我们应该做的啦 :grin: