stopAllEffects 后安卓上无法恢复背景音乐

  • Creator 版本:2.0.9

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:

  • 重现方式:调用cc.audioEngine.pauseMusic();cc.audioEngine.stopAllEffects();

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:
    游戏中的音效开关按钮,先是暂停了背景音乐,然后停止所有的音效。之后重新开启音效时,恢复背景音乐。
    web是没有问题的,能正确恢复背景音乐。但是在安卓就不能恢复了。
    查看了一下web的代码:

    stopAllEffects: function () {
    var musicId = this._music.id;
    for (var id in _id2audio) {
    var audio = _id2audio[id];
    if (!audio || audio.id === musicId) continue;
    var state = audio.getState();
    if (state === audioEngine.AudioState.PLAYING) {
    audio.stop();
    }
    }
    }
    这里有正确剔除背景音乐啊。
    再查看了一下安卓的代码,发现有这段代码,覆盖了原有的

    audioEngine.stopAllEffects = function () {
    var musicPlaying = audioEngine.getState(_music.id) === audioEngine.AudioState.PLAYING;
    var currentTime = audioEngine.getCurrentTime(_music.id);
    audioEngine.stopAll();
    if (musicPlaying) {
    _music.id = audioEngine.play(_music.clip, _music.loop);
    audioEngine.setCurrentTime(_music.id, currentTime);
    }
    };

如果是这样,那应该是我执行顺序的问题,我先暂停了背景音乐导致这里musicPlaying判断为false了。
于是修改了顺序,cc.audioEngine.stopAllEffects();cc.audioEngine.pauseMusic();

这就先停止音效,再暂停背景音乐。
但是现在是变成暂停不了背景音乐了,而且点击暂停的时候背景音反而变大了。

原本我是有控制背景音量的,但现在这里只是把音乐按原本的时间重新播放了。音量是没做处理的,而且在重新播放的同时调用pauseMusic,是不起作用的。我延时0.1秒调用pauseMusic,是可以正确暂停了,但是音量就得重新控制了。

还有这样处理还会引发另外一个问题,就是我已经在自己的控制组件中保存了_music.id,用来控制音量的。然而这里直接就给换了,而我组件里还是记录的旧的。所以音量的控制就没用了。

总结后,我舍弃了这种调用方式,我采用stopAllEffects这里的修改方式,暂停的时候我在组件记录下当前的音乐时间进度,然后恢复的时候,重新播放并调时间到暂停的时间,再设置音量。自己在组件中做背景音乐的控制。完成了原本的功能。

在这里只是想说web版本的stopAllEffects是有剔除_music.id的暂停的,为什么在安卓版本上要覆盖成这样?想请教下是为何意?可以直接去掉这个覆盖,调用原本的stopAllEffects吗?

2赞