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: 对不起我的英文
我正在写一个简单的游戏用于学习目的。一切顺利,除了一件小事...
我不知道如何在没有这种丑陋的跳跃的情况下旋转正方形
这里是我程序的简化版本,说明了一个问题,这里我使用一个计时器,但在原始程序中我有 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: 对不起我的英文