[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++;
        }
    } 
}
微信截图_20201211104408.png
已邀请:

要回复问题请先

商务合作
商务合作