Java Swing Graphics2d旋转跳跃

Java Swing Graphics2d rotation jumping

我正在写一个简单的游戏用于学习目的。一切顺利,除了一件小事...

我不知道如何在没有这种丑陋的跳跃的情况下旋转正方形

这里是我程序的简化版本,说明了一个问题,这里我使用一个计时器,但在原始程序中我有 2 个计时器,一个用于处理游戏状态,第二个用于重绘:

public class soQuestion extends JLabel {

    double r;

    @Override
    public void paintComponent(Graphics g1) {
        Graphics2D g = (Graphics2D) g1;
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        g.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
        g.clearRect(0,0, getWidth(), getHeight());
        g.translate(getWidth()/2, getHeight()/2);
        g.rotate(r);
        g.translate(-20, -20);
        g.fillRect(0, 0, 40, 40);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        soQuestion question = new soQuestion();
        frame.add(question);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        new javax.swing.Timer(10, new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                r += 0.005;
                question.repaint();
            }
        }).start();
    }
}

如果旋转增量值较小,则跳跃更明显,因为快速旋转的物体不太明显..

我使用的所有渲染提示都没有效果

PS: 对不起我的英文

PPS:如果需要,我可以提供更多细节,完整版的外观:

我是新贡献者,所以如果它不是最好的帮助,对不起,但我正在努力:)

您是否尝试过在 g.rotate() 函数中使用 Math.toRadiants() 的解决方案?在此视频中:Java: Rotating and scaling images 图像旋转不跳动,在视频中6:42。

所以在你的解决方案中,它看起来像这样:g.rotate(Math.toRadiants(r += 0.005));

感谢所有参与者!

完全是我的失误和疏忽。我是从某个来源复制此代码部分的:

g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

在这里提问之前我没看到我使用了与文本渲染相关的提示。

特别感谢@Pshemo 先生建议使用此渲染提示:

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

我在问之前就知道了,但我是一个人,一个小时都搞不清楚哪里出错了,然后问了。

PS: 对不起我的英文