使用AffineTransform旋转时,图像未绘制到固定位置

时间:2012-01-03 15:34:25

标签: java graphics affinetransform

我在使用Graphcis2D和AffineTransform在固定位置旋转图像时遇到问题。

我们的想法是根据身体的旋转来旋转图像。

当图像的旋转角度与身体旋转的角度匹配时,旋转正确发生。但是,当旋转发生时,图像不会绘制到与绘制主体相同的位置。绘制图片的方法代码如下:

public void paintPicture(Graphics g, Body body) {

    Graphics2D g2 = (Graphics2D) g;

    Vector2f[] vertices = ((Box) body.getShape()).getPoints(body.getPosition(), body.getRotation());

    Vector2f topLeftCorner = vertices[0];

    AffineTransform oldTransform = g2.getTransform();

    AffineTransform at = new AffineTransform();

    at.rotate(body.getRotation());

    g2.setTransform(at);

    g2.drawImage(this.img, (int) topLeftCorner.x, (int) topLeftCorner.y, null);

    g2.setTransform(oldTransform);
}

任何可能导致图像移动的想法,而不是根据坐标(topLeftCorner.x,topLeftCorner.y)绘制它?

1 个答案:

答案 0 :(得分:0)

您需要首先翻译对象,使锚点(您希望它旋转的点)位于原点,执行旋转,然后将其翻译回来。因此,如果您想绕点(50,75)旋转,您可以执行以下操作:

at.translate (-50, -75);
at.rotate (body.getRotation());
at.translate (50, 75);

我假设您的AffineTransform类可以累积转换。如果没有,您将需要3种不同的变换。