如何旋转图形对象而不更改其位置?

use*_*201 5 java swing rotation graphics2d paintcomponent

我得到以下代码:

import java.awt.*;
import javax.swing.*;

public class GraphicPanel extends JPanel {

    public void paintComponent(Graphics g){

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        g2d.setFont(new Font("Arial",Font.BOLD,24));
        g2d.drawString("A",300,250);
        g2d.rotate(45 * Math.PI/180);
        g2d.drawString("B",300,250);

    }

}
Run Code Online (Sandbox Code Playgroud)

它应该旋转B并将其放在A所在的相同位置,但是由于某种原因,B会在完全不同的位置出现。

我很确定我理解为什么。这是因为缩放,旋转等操作时会操纵整个协调系统(我正确吗?)

无论如何,我想知道如何旋转或缩放对象,并且仍然使它出现在以前的位置。例如,在一个游戏中,每10毫秒不断更新和显示一次自身,其中一个精灵正在旋转,但是仍然停留在10毫秒之前的位置。

编辑:试图事先搜索Google,猜想这个问题的措辞有点棘手,因为我发现没有帮助。

非常感谢 :)

Ton*_*ato 5

当您在对象上调用该rotate方法时Graphics2D,您将围绕原点将整个画布旋转该角度。因此,如果从 (300, 250) 开始,然后绕 (0, 0) 旋转 45 度,则旋转后在 (300, 250) 处绘制形状将会在该点映射到的任何位置绘制该形状。

您应该使用另一种形式,rotate获取旋转枢轴点的角度以及 x 和 y 坐标,并将您的点 (300, 250) 传递到其中。(不过,如果您想围绕字符或字符串的中心旋转,则需要稍微调整该点。)