-
Creator 版本:
-
目标平台:
-
详细报错信息,包含调用堆栈:
-
重现方式:
-
之前哪个版本是正常的 :
-
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :
-
出现概率:
-
额外线索:
Creator 版本:
目标平台:
详细报错信息,包含调用堆栈:
重现方式:
之前哪个版本是正常的 :
手机型号 :
手机浏览器 :
编辑器操作系统 :
编辑器之前是否有其它报错 :
出现概率:
额外线索:
audioEngine 一直存在bug,它本身是异步的,如果极短时间内有多次切换,多次播放之类的,必须中间做延迟,一般100ms延迟就够了,在这个延迟氛围内,禁用一切audioEngine操作,否则就会出各种诡异bug。
反馈过多次,一直未修复。
感谢 junlas 您的回复!我不知道怎么做才是好的,下面是我的测试代码,不成功。
this.node.stopAllActions();
let a =[];
let canPlayEffect = true;
let id;
let time;
for(let i=0;i<=20;i++){
a.push(cc.callFunc(()=>{
if(canPlayEffect){
log("i=",i);
id = cc.audioEngine.playEffect(this.cardAudio[card3], false);
let state = cc.audioEngine.getState(id);
time = cc.audioEngine.getDuration(id);
let currentTime = cc.audioEngine.getCurrentTime(id);
log("playEffect id=",id,"state=",state,"time=",time,"currentTime=",currentTime);
canPlayEffect = false;
cc.audioEngine.setFinishCallback(id, ()=> {
log("playEffect Finish id = ",id);
canPlayEffect = true;
});
} else if(id != undefined) {
let currentTime = cc.audioEngine.getCurrentTime(id);
let state = cc.audioEngine.getState(id);
log("stopEffect id=",id,"state=",state,"currentTime=",currentTime);
//cc.audioEngine.setCurrentTime(id, time);
//cc.audioEngine.stopAllEffects();
cc.audioEngine.stopEffect(id);
canPlayEffect = true;
}
}));
a.push(cc.delayTime(5));
}
this.node.runAction(cc.sequence(a));
下面是log:
i= 0
playEffect id= 0 state= 1 time= 0.6008163265306122 currentTime= 0
playEffect Finish id = 0
i= 1
playEffect id= 1 state= 1 time= 0.6008163265306122 currentTime= 0
playEffect Finish id = 1
i= 2
playEffect id= 2 state= 1 time= 0.6008163265306122 currentTime= 0
playEffect Finish id = 2
i= 3
playEffect id= 3 state= 1 time= 0.6008163265306122 currentTime= 0
playEffect Finish id = 3
i= 4
playEffect id= 4 state= 1 time= 0.6008163265306122 currentTime= 0
playEffect Finish id = 4
i= 5
playEffect id= 5 state= 1 time= 0.6008163265306122 currentTime= 0
stopEffect id= 5 state= 1 currentTime= 0.5979138321995521
i= 7
playEffect id= 6 state= 1 time= 0.6008163265306122 currentTime= 0
stopEffect id= 6 state= 1 currentTime= 0
i= 9
playEffect id= 7 state= 1 time= 0.6008163265306122 currentTime= 0
stopEffect id= 7 state= 1 currentTime= 0
i= 11
playEffect id= 8 state= 1 time= 0.6008163265306122 currentTime= 0
当id= 5 没有playEffect Finish的时候,下面继续播就没有声音了,不知道怎么解决.
已经做了很长等待 a.push(cc.delayTime(5));
我也遇到同样的问题,微信小游戏,在 2.2.2 上正常,升级到 2.3.3 之后多次播放没声音,而且只有在真机上会这样,浏览器里和模拟器里都是好的。把播放间隔调大到100ms确实就好了,但这样效果差很多。
奥,我的问题解决了,2.3.3版引擎中在这个CocosDashboard\resources.editors\Creator\2.3.3\resources\builtin\adapters\common\engine\AudioEngine.js 这个文件中配置了 cc.audioEngine._maxAudioInstance = 10; 就是同一个声音同时最多播放10个,以前是默认24。直接注释掉,或者在项目里设置把这个值改大 cc.audioEngine.setMaxAudioInstance(24); 问题就解决了。