Is this kind of collision detection (essentiallyEqual) slightly fragile?  especially if we end up with different sized sprites?  I have always used this to determine a collision between two rectangles:

    function Collide(x1, y1, w1, h1, x2, y2, w2, h2)
    {
      // detect a non-collision.  Otherwise we have a collision.
      if (x1 + w1 - 1 < x2 ||
          x1 > x2 + w2 - 1 ||
          y1 + h1 - 1 < y2 ||
          y1 > y2 + h2 - 1)
        return false;
      return true;
    }