       change: target - @[property]
       duration: duration
       easingFunc: Easie[easing]
+      callback: callback
 
 module.exports = Shape

      tween.time += delta * 1000 # (delta is in seconds)
      tween.time = tween.duration if tween.time > tween.duration
      @[tween.property] = tween.easingFunc(tween.time, tween.start, tween.change, tween.duration) # time,begin,change,duration
      @tweens.splice(i, 1) if tween.time == tween.duration

    @velocity.x += @acceleration.x
    @velocity.y += @acceleration.y

    return false if @ == other
    Math.abs(@position.x - other.position.x) < @size.width / 2 + other.size.width / 2 && Math.abs(@position.y - other.position.y) < @size.height / 2 + other.size.height / 2

  tween: (property, target, duration = 500, easing = 'linearNone', callback) ->
    # TODO: How to handle compound properties, such as @position?
    # context = @
    # if property.indexOf('.') != -1
