# Clip 类

# 概述

动画主控制器, 目前只发现 Animator 中存在实例化的过程

主要用于比例的计算及部分流程控制

# 构造函数

参数 options

类型 说明
target Animator | Animator[] 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件
life Number 动画时长
delay Number 动画延迟时间
loop Boolean 是否循环
gap Number 循环的间隔时间
easing String 缓动名称
onframe Function 每一帧的回调函数
ondestroy Function 销毁的回调函数
onrestart Function 重新开始的回调函数

# 方法

# step

获取当前时间在整个动画轨迹的百分比,并根据缓动效果重新计算比例,结束后

step: function (globalTime, deltaTime) {
    if (!this._initialized) {
        this._startTime = globalTime + this._delay;
        this._initialized = true;
    }

    if (this._paused) {
        this._pausedTime += deltaTime;
        return;
    }

    var percent = (globalTime - this._startTime - this._pausedTime) / this._life;

    if (percent < 0) {
        return;
    }
    percent = Math.min(percent, 1);

    // 根据缓动函数重新获取比例值
    var easing = this.easing;
    var easingFunc = typeof easing === 'string' ? easingFuncs[easing] : easing;
    var schedule = typeof easingFunc === 'function'
        ? easingFunc(percent)
        : percent;

    this.fire('frame', schedule);

    // 结束
    if (percent === 1) {
        if (this.loop) {
            this.restart(globalTime);
            // 重新开始周期
            // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件
            return 'restart';
        }

        // 动画完成将这个控制器标识为待删除
        // 在Animation.update中进行批量删除
        this._needsRemove = true;
        return 'destroy';
    }

    return null;
}

# restart

重新开始

restart: function (globalTime) {
    var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;
    this._startTime = globalTime - remainder + this.gap;
    this._pausedTime = 0;
    this._needsRemove = false;
}

# fire

触发事件

fire: function (eventType, arg) {
    eventType = 'on' + eventType;
    if (this[eventType]) {
        this[eventType](this._target, arg);
    }
}

# pause

暂停

pause: function () {
    this._paused = true;
}

# resume

恢复

resume: function () {
    this._paused = false;
}