Java Swing Graphics2d旋转跳转

问题描述 投票:2回答:2

我正在为学习目的写一个简单的游戏。一切都很好,除了一件小事......

如果没有这种丑陋的跳跃,我无法弄清楚如何旋转方形

enter image description here

这里是我的程序的简化版本,说明了一个问题,这里我使用一个计时器,但在原始程序中我有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:如果需要,我可以提供更多详细信息,它在完整版中的外观如何:

enter image description here

java swing graphics2d
2个回答
2
投票

感谢所有参与者!

这完全是我的错误和注意力不集中。我从一些来源复制了这段代码:

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

在这里问一个问题之前,我看不到我使用了与文本渲染相关的提示。

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

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

在询问之前我才知道它,但我是一个人,无法弄清楚一个小时的错误在哪里问。

PS:对不起我的英语


0
投票

我是新的贡献者,所以如果它不是最好的帮助,sry但我正在尝试:)

你尝试过在g.rotate()函数中使用Math.toRadiants()的解决方案吗?在这个视频中:Java: Rotating and scaling images图像旋转而没有跳跃,它是在视频中的6:42。

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

© www.soinside.com 2019 - 2024. All rights reserved.