anchor.diff:      context.translate(-positionAnchor.x * width, -positionAnchor.y * height);
     }
   
  -  drawWithTransform(context) {
  -// TODO: refactor this out.
  -//      context.save();
  -//      context.strokeStyle = "#FF0000";
  -//      context.beginPath();
  -//      context.rect(position.x, position.y, width, height);
  -//      context.stroke();
  -//      context.restore();
  -
  +  void drawWithTransform(context) {
         context.save();
         transform(context);
         draw(context);
         context.restore();
     }
   
  -  drawWithChildren(context) {
  +  void drawWithChildren(context) {
       if (visible) {
         for (var child in children) {
           child.drawWithChildren(context);
  
positive.code:   num get width;
    num get height;
  
    vec2 _position = new vec2(0, 0);
    vec2 get position => _position;
    void set position(p) {
      if (p is List) {
        _position = new vec2(p[0], p[1]);
      } else {
        _position = p;
      }
    }
  
    transform(CanvasRenderingContext2D context) {
      context.globalAlpha = opacity;
      context.translate(position.x, position.y);
  
  
negative.code:     onFrameController.add(dt);
    }
  
    void add(node) {
      children.add(node);
      node.parent = this;
    }
    
    void addTo(node) {
      node.add(this);
      this.parent = node;
    }
  
    void remove(GameNode node) {
      children.removeRange(children.indexOf(node), 1);
      node.parent = null;
    }
    
    void removeFrom() {
      parent = null;
    }
  
    void runAction(Action action) {
      action.target = this;
      actions.add(action);
      action.start();
    }
  
    void stopActions() {
      for (var action in new List.from(actions)) {
        action.stop();
        actions.removeRange(actions.indexOf(action), 1);
  