code: function(animator, duration, easing, delay, callback) {
              var queue = this._KityAnimateQueue = this._KityAnimateQueue || [];
              var timeline = animator.create(this, duration, easing, callback);
  
              function dequeue() {
                  queue.shift();
                  if (queue.length) {
                      setTimeout(queue[0].t.play.bind(queue[0].t), queue[0].d);
                  }
              }
              timeline.on('finish', dequeue);
              queue.push({
                  t: timeline,
                  d: delay
              });
              if (queue.length == 1) {
                  setTimeout(timeline.play.bind(timeline), delay);
              }
              return this;
          }
docs: @method animate()
  @for kity.Shape
  @description 在图形上播放使用指定的动画器播放动画，如果图形当前有动画正在播放，则会加入播放队列
  
  @grammar animate(animator, duration, easing, delay, callback)
  
  @param  {object}            animator 播放动画使用的动画器
  @param  {Number|String}     duration 动画的播放长度，如 300、"5s"、"0.5min"
  @param  {Number|String}     delay    动画播放前的延时
  @param  {String|Function}   easing   动画播放使用的缓动函数，如 'ease'、'linear'、'swing'
  @param  {Function}          callback 播放结束之后的回调函数
  
  @example
  
  ```js
  rect.animate(turnRed, 300); // turnRect 是一个动画器
  rect.animate(expand, 500);  // turnRect 播放结束后播放 expand
  ```