public boolean boxCollision(Sprite other) {
        if (this.transformChanged)
            this.updateTransform();
        if (other.transformChanged)
            other.updateTransform();

        // set up the Points describing this's bounding box

        int x1 = (int) (this.x - this.fx * this.boxScale + 0.5);
        int w1 = (int) (this.width * this.boxScale + 0.5);
        int y1 = (int) (this.y - this.fy * this.boxScale + 0.5);
        int h1 = (int) (this.height * this.boxScale + 0.5);

        AffineTransform thisTrans = AffineTransform.getTranslateInstance(this.x, this.y);
        thisTrans.concatenate(this.transform);
        thisTrans.translate(0 - this.x, 0 - this.y);

        Point2D[] tPoints = new Point2D[4];
        tPoints[0] = thisTrans.transform(new Point(x1, y1), tPoints[0]);
        tPoints[1] = thisTrans.transform(new Point(x1 + w1, y1), tPoints[1]);
        tPoints[2] = thisTrans.transform(new Point(x1 + w1, y1 + h1), tPoints[2]);
        tPoints[3] = thisTrans.transform(new Point(x1, y1 + h1), tPoints[3]);

        // set up the Points describing other's bounding box

        int x2 = (int) (other.x - other.fx * other.boxScale + 0.5);
        int w2 = (int) (other.width * other.boxScale + 0.5);
        int y2 = (int) (other.y - other.fy * other.boxScale + 0.5);
        int h2 = (int) (other.height * other.boxScale + 0.5);

        AffineTransform otherTrans = AffineTransform.getTranslateInstance(other.x, other.y);
        otherTrans.concatenate(other.transform);
        otherTrans.translate(0 - other.x, 0 - other.y);


        Point2D[] oPoints = new Point2D[4];
        oPoints[0] = otherTrans.transform(new Point(x2, y2), oPoints[0]);
        oPoints[1] = otherTrans.transform(new Point(x2 + w2, y2), oPoints[1]);
        oPoints[2] = otherTrans.transform(new Point(x2 + w2, y2 + h2), oPoints[2]);
        oPoints[3] = otherTrans.transform(new Point(x2, y2 + h2), oPoints[3]);

        // use axis of separation theorem to test for collisions.

        //log.d("AoST this vs other");
        if (axisOfSeparation(tPoints, oPoints)) {
            //log.d("AoST other vs this");
            return axisOfSeparation(oPoints, tPoints);
        } else
            return false;
    }