[LayaAir 2.0]Clip组件Bug:Play方法无法结束循环
代码创建Clip组件,调用play(0,10)无法结束循环
问题原因:
在源码中,play方法中添加了Laya.Event.DISPLAY监听函数:_onDisplay
而_onDisplay函数中,又调用了play()方法,而且是没带参数!!!
这样导致在play方法中,传入的to参数无效!!!
另外分享下自己的修改方法(最好不要去修改源码,现在有插件开发,修改源码会有问题):
export default class GifView extends Laya.Clip {
/**
*开始帧位置
*
* @private
* @memberof GifView
*/
private frameIndex = 0;
/**
*结束帧位置
*
* @private
* @memberof GifView
*/
private toFrameIndex = -1;
/**
* @param {string} path 原图位置(Sprite图)
* @param {number} cols 列数
* @param {number} rows 行数
* @param {number} [interval] 间隔时间,选填
* @param {boolean} [isLoop] 是否循环,默认不循环
* @memberof GifView
*/
constructor(path: string, cols: number, rows: number, interval?: number, isLoop?: boolean) {
super(path, cols, rows);
if (interval != void 0) {
this.interval = interval;
}
this.on(Laya.Event.COMPLETE, this, () => {
this.destroy();
});
this.frameIndex = 0;
isLoop ? this.toFrameIndex = -1 : this.toFrameIndex = (cols * rows - 1);
this.play(0, isLoop ? -1 : (cols * rows - 1));
}
/**
* 重写父类方法
*/
_loop() {
if (this.visible && this._sources) {
if (this.toFrameIndex > -1 && this.frameIndex >= this.toFrameIndex) { this.stop(); }
else if (this.frameIndex >= this._sources.length) { this.frameIndex = 0; }
//改变帧位置
this.index = this.frameIndex;
this.frameIndex++;
}
}
}
问题原因:
在源码中,play方法中添加了Laya.Event.DISPLAY监听函数:_onDisplay
而_onDisplay函数中,又调用了play()方法,而且是没带参数!!!
这样导致在play方法中,传入的to参数无效!!!
另外分享下自己的修改方法(最好不要去修改源码,现在有插件开发,修改源码会有问题):
export default class GifView extends Laya.Clip {
/**
*开始帧位置
*
* @private
* @memberof GifView
*/
private frameIndex = 0;
/**
*结束帧位置
*
* @private
* @memberof GifView
*/
private toFrameIndex = -1;
/**
* @param {string} path 原图位置(Sprite图)
* @param {number} cols 列数
* @param {number} rows 行数
* @param {number} [interval] 间隔时间,选填
* @param {boolean} [isLoop] 是否循环,默认不循环
* @memberof GifView
*/
constructor(path: string, cols: number, rows: number, interval?: number, isLoop?: boolean) {
super(path, cols, rows);
if (interval != void 0) {
this.interval = interval;
}
this.on(Laya.Event.COMPLETE, this, () => {
this.destroy();
});
this.frameIndex = 0;
isLoop ? this.toFrameIndex = -1 : this.toFrameIndex = (cols * rows - 1);
this.play(0, isLoop ? -1 : (cols * rows - 1));
}
/**
* 重写父类方法
*/
_loop() {
if (this.visible && this._sources) {
if (this.toFrameIndex > -1 && this.frameIndex >= this.toFrameIndex) { this.stop(); }
else if (this.frameIndex >= this._sources.length) { this.frameIndex = 0; }
//改变帧位置
this.index = this.frameIndex;
this.frameIndex++;
}
}
}
没有找到相关结果
已邀请:
要回复问题请先登录
0 个回复