我正在为学习目的写一个简单的游戏。一切都很好,除了一件小事......
如果没有这种丑陋的跳跃,我无法弄清楚如何旋转方形
这里是我的程序的简化版本,说明了一个问题,这里我使用一个计时器,但在原始程序中我有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.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
在这里问一个问题之前,我看不到我使用了与文本渲染相关的提示。
特别感谢@Pshemo先生建议使用此渲染提示:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
在询问之前我才知道它,但我是一个人,无法弄清楚一个小时的错误在哪里问。
PS:对不起我的英语
我是新的贡献者,所以如果它不是最好的帮助,sry但我正在尝试:)
你尝试过在g.rotate()函数中使用Math.toRadiants()的解决方案吗?在这个视频中:Java: Rotating and scaling images图像旋转而没有跳跃,它是在视频中的6:42。
所以在你的解决方案中,它看起来像那样:g.rotate(Math.toRadiants(r += 0.005));