我一直在尝试在纯Java中制作一个简单的游戏,并且在绘图中遇到了问题。我试图保持相对较高的帧速率,但是JFrame.repaint()不能被“强制”并且只是在下一个可用机会重新绘制帧的请求时遇到问题。结果,下面的代码的帧率非常糟糕。然而,(这是一个奇怪的部分),当我的鼠标没有移动时,它似乎只是很糟糕。如果我的鼠标正在移动并且超出了窗口的顶部,则帧速率很快且很清晰。我如何(正确)在纯Java中以高帧率渲染
我已经尝试过各种在线建议,甚至编译过关于如何做到这一点的示例,并且当鼠标不移动到窗口上时,它们似乎都具有相同的帧速率下降问题。
(我使用Linux,如果该事项)
任何及所有的帮助深表感谢!
import java.awt.*;
import javax.swing.*;
public class Test extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300, 300));
frame.setVisible(true);
frame.getContentPane().add(new Test());
for (int k = 0; k < 1_000_000; k++) {
frame.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(1);
}
}
frame.dispose();
System.exit(0);
}
private int k = 0;
public Test() {
super();
}
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
int height = (int) (((k * 0.01) % 1) * getHeight());
g.drawLine(
0, height,
getWidth(), height
);
k++;
}
}
更好看看gamedev.stackexchange.com。这对你来说看起来像是一个有用的问题(“不要在绘画方法中更新你的”k“,它基于壁钟)”https://gamedev.stackexchange.com/questions/43347/how-to-handle -frame-rates-and-synchronizing-screen-repaints –
'这似乎只在我的鼠标没有移动时变得糟糕透顶。如果我的鼠标正在移动并且超出了窗口的顶部,则帧速率很快且很清晰。“ - 对于我来说,无论鼠标是否在移动,帧速率都与我相同。我在Window 7上使用JDK8。另外,只需在构造函数中设置面板的背景。不需要画背景两次。 – camickr
为了简单起见,只是把K放在那里。游戏要复杂得多。我只写了一小段代码来演示我的渲染更新问题。但我会看看gamedev。谢谢 – LeqxLeqx