code: function(frameData) {
          var dt = frameData.dt / 1000; // time in s
          var vx = this._vx,
              ax = this._ax,
              vy = this._vy,
              ay = this._ay;
  
          // s += v * Δt + (0.5 * a) * Δt * Δt
          var dx = vx * dt + 0.5 * ax * dt * dt;
          var dy = vy * dt + 0.5 * ay * dt * dt;
          // v += a * Δt
          this.vx = vx + ax * dt;
          this.vy = vy + ay * dt;
  
          // Check if direction of velocity has changed
          var oldDirection = this.__oldDirection,
              _vx = this._vx,
              dvx = _vx ? (_vx < 0 ? -1 : 1) : 0, // A quick implementation of Math.sign
              _vy = this._vy,
              dvy = _vy ? (_vy < 0 ? -1 : 1) : 0;
          if (oldDirection.x !== dvx || oldDirection.y !== dvy) {
              oldDirection.x = dvx;
              oldDirection.y = dvy;
              this.trigger("NewDirection", oldDirection);
          }
  
          this._dx = dx;
          this._dy = dy;
  
          // Set the position using the optimized _setPosition method
          this._setPosition(this._x + dx, this._y + dy);
      }
docs: /*
  s += v * Δt + (0.5 * a) * Δt * Δt
  v += a * Δt