[LayaNative 2.0]销毁有声音的spine动画,skeleton中的_onAniSoundStoped有时会报undefined错误
/**
*@private
*清掉播放完成的音频
*@param force 是否强制删掉所有的声音channel
*/
__proto._onAniSoundStoped=function(force){
var _channel;
for (var len=this._soundChannelArr.length,i=0;i < len;i++){
_channel=this._soundChannelArr;
if (_channel.isStopped || force){
!_channel.isStopped && _channel.stop();
this._soundChannelArr.splice(i,1);
len--;i--;
}
}
}
/**
*停止播放
*/
__proto.stop=function(){
_super.prototype.stop.call(this);
/**
*停止播放。
*/
__proto.stop=function(){
if (this.completeHandler)this.completeHandler.run();
}
猜测bug原因如下:销毁一个有多个音效在同时播放的Skeleton对象时,上面第一个函数中的__channel.stop();会回调_onAniSoundStoped函数本身,如果这个时候一个音频自动播放完了,另一个线程会把channel的isStoped设为真,回调时就会删除数组中的元素,这样第一次调用时的len和数组长度就不一致了,if (_channel.isStopped || force)中的的_channel就有可能是undefined
*@private
*清掉播放完成的音频
*@param force 是否强制删掉所有的声音channel
*/
__proto._onAniSoundStoped=function(force){
var _channel;
for (var len=this._soundChannelArr.length,i=0;i < len;i++){
_channel=this._soundChannelArr;
if (_channel.isStopped || force){
!_channel.isStopped && _channel.stop();
this._soundChannelArr.splice(i,1);
len--;i--;
}
}
}
/**
*停止播放
*/
__proto.stop=function(){
_super.prototype.stop.call(this);
/**
*停止播放。
*/
__proto.stop=function(){
if (this.completeHandler)this.completeHandler.run();
}
猜测bug原因如下:销毁一个有多个音效在同时播放的Skeleton对象时,上面第一个函数中的__channel.stop();会回调_onAniSoundStoped函数本身,如果这个时候一个音频自动播放完了,另一个线程会把channel的isStoped设为真,回调时就会删除数组中的元素,这样第一次调用时的len和数组长度就不一致了,if (_channel.isStopped || force)中的的_channel就有可能是undefined
要回复问题请先登录
0 个回复