docs: function( body, view, ctx, offset ){
  
              var pos = body.state.pos
                  ,os = body.offset
                  ,v = body.state.vel
                  ,t = this._interpolateTime || 0
                  ,x
                  ,y
                  ,ang
                  ,aabb
                  ;
  
              offset = offset || this.options.offset;
              ctx = ctx || this.ctx;
  
              // interpolate positions
              x = pos._[0] + offset.x + v._[0] * t;
              y = pos._[1] + offset.y + v._[1] * t;
              ang = body.state.angular.pos + body.state.angular.vel * t;
  
              ctx.save();
              ctx.translate( x, y );
              ctx.rotate( ang );
              this.drawCircle( 0, 0, 2, 'red' );
              ctx.translate( os.x, os.y );
              ctx.drawImage(view, -view.width/2, -view.height/2, view.width, view.height);
              ctx.restore();
  
              if ( this.options.drawAABB ){
                  aabb = body.aabb();
                  // draw bounding boxes
                  this.drawRect( aabb.x, aabb.y, 2 * aabb.hw, 2 * aabb.hh, this.options.aabbColor );
              }
  
              if ( this.options.drawRealPosition ){
                  // draw the non-interpolated body position
                  body._debugView = body._debugView || this.createView(body.geometry, this.options.realBodyStyle);
                  ctx.save();
                  ctx.translate(pos.x + offset.x, pos.y + offset.y);
                  ctx.rotate(body.state.angular.pos);
                  ctx.translate( os.x, os.y );
                  ctx.drawImage(body._debugView, -body._debugView.width * 0.5, -body._debugView.height * 0.5);
                  ctx.restore();
              }
  
              if ( this.options.drawSleepState && body.sleep() ){
                  aabb = aabb || body.aabb();
                  body._sleepView = body._sleepView || this.createView(body.geometry, 'rgba(100,100,100,0.3)');
                  ctx.save();
                  ctx.globalCompositeOperation = 'color';
                  ctx.translate( x, y );
                  ctx.rotate( ang );
                  ctx.translate( os.x, os.y );
                  ctx.drawImage(body._sleepView, -view.width/2, -view.height/2, view.width, view.height);
                  // ctx.globalCompositeOperation = '';
                  ctx.restore();
              }
  
              if ( this.options.drawBodyState ){
                  ctx.strokeStyle = 'black';
                  ctx.shadowColor = '#fff';
                  ctx.shadowBlur = 4;
                  ctx.font = '12px monospace';
                  ctx.strokeText('r: ('+x.toFixed(0)+', '+y.toFixed(0)+')', x, y-8);
                  ctx.strokeText('v: ('+format(v.x)+', '+format(v.y)+')', x, y+12);
                  ctx.strokeText('o: ('+format(os.x)+', '+format(os.y)+')', x, y+26);
                  ctx.shadowBlur = 0;
                  ctx.shadowColor = '';
              }
          }