     )
 
   self.bind 'draw', (canvas) ->
-    if sprite = I.sprite
-      if sprite.draw? 
-        sprite.draw(canvas, -sprite.width / 2, -sprite.height / 2)
+    if I.alpha && I.alpha != 1
+      previousAlpha = I.alpha
+
+      canvas.context().globalAlpha = I.alpha
+
+    if I.sprite
+      if I.sprite.draw? 
+        I.sprite.draw(canvas, 0, 0)
       else
         warn?("Sprite has no draw method!")
     else
       if I.radius?
         canvas.drawCircle
-          x: 0
-          y: 0
+          x: I.width/2
+          y: I.height/2
           radius: I.radius
           color: I.color
       else
         canvas.drawRect
-          x: -I.width/2
-          y: -I.height/2
+          x: 0
+          y: 0
           width: I.width
           height: I.height
           color: I.color
+
+    if I.alpha && I.alpha != 1
+      I.alpha = previousAlpha
 
   ###*
   Draw does not actually do any drawing itself, instead it triggers all of the draw events.

    transform = transform.concat(Matrix.HORIZONTAL_FLIP) if I.hflip
    transform = transform.concat(Matrix.VERTICAL_FLIP) if I.vflip

    if I.spriteOffset
      transform = transform.concat(Matrix.translation(I.spriteOffset.x, I.spriteOffset.y))


  I ||= {}

  Object.reverseMerge I,
    alpha: 1
    color: "#196"
    hflip: false
    vflip: false
