版本 2.2-2.3
手机 iphone 6s, 8, X
浏览器 safari qq chrome
代码部分:
SoundManager 核心部分代码:
/**
* 播放背景音乐
*/
music(url: string) {
this._url = url;
this._playCurMusic();
}
/**
* 播放当前音乐
*/
private _playCurMusic() {
let url = this._url,
audio: cc.AudioClip =
cc.loader.getRes(url);
if (!audio) {
cc.loader.loadRes(url, cc.AudioClip, (err, res: cc.AudioClip) => {
if (err) {
cc.error('load error');
this.scheduleOnce(
() => {
this._playCurMusic
}, 3
);
return;
}
cc.error('music loaded');
this._playMusic(res);
});
} else {
this._playMusic(audio);
}
}
/**
* 播放音乐
* @param audio
*/
private _playMusic(audio: cc.AudioClip) {
cc.audioEngine.stopMusic();
this.unscheduleAllCallbacks();
this._musicID = cc.audioEngine.playMusic(
audio, false);
cc.error('play', this._musicID);
}
场景逻辑
onLoad: 调用SoundManager播放背景音乐
场景按钮逻辑:
点击后调用SoundManager播放背景音乐
bug触发方法:
1.首先运行项目,由于以上浏览器都需要手势触发播放,先不触发
2.切到其他网页或者app看视频或者听音乐,触发音频播放
3.切回项目页面手势触发音乐播放
4.点击按钮再次触发音乐播放
5.此时之前的音乐调用stop已经无法停止,新的音乐同时播放。
PS: 附带android部分的bug:
部分安卓浏览器,尤其是UC浏览器,如果在onLoad中注册
cc.game.on(cc.game.EVENT_HIDE, this._onHide, this);
并在onHide中播放音乐,切换到后台后音乐仍然会播放
@kenshin
附上项目代码:
Script.zip (3.7 KB)