code: function (opts) {
  
      opts = opts || {};
  
      Clip.call(this, opts);
  
      /**
       *
       * @type {clay.animation.SamplerTrack[]}
       */
      this.tracks = opts.tracks || [];
  
      this.calcLifeFromTracks();
  }
docs: DEPRECATED 
  
  Animation clip that manage a collection of {@link clay.animation.SamplerTrack}
  @constructor
  @alias clay.animation.TrackClip
  
  @extends clay.animation.Clip
  @param {Object} [opts]
  @param {string} [opts.name]
  @param {Object} [opts.target]
  @param {number} [opts.life]
  @param {number} [opts.delay]
  @param {number} [opts.gap]
  @param {number} [opts.playbackRatio]
  @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation
  @param {string|Function} [opts.easing]
  @param {Function} [opts.onframe]
  @param {Function} [opts.onfinish]
  @param {Function} [opts.onrestart]
  @param {Array.<clay.animation.SamplerTrack>} [opts.tracks]