我在使用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)绘制它?
答案 0 :(得分:0)
您需要首先翻译对象,使锚点(您希望它旋转的点)位于原点,执行旋转,然后将其翻译回来。因此,如果您想绕点(50,75)旋转,您可以执行以下操作:
at.translate (-50, -75);
at.rotate (body.getRotation());
at.translate (50, 75);
我假设您的AffineTransform类可以累积转换。如果没有,您将需要3种不同的变换。