Java Swing或AWT重绘频率

时间:2015-08-29 08:55:34

标签: java

我尝试用Java制作一个简单的游戏,最后得到了这段代码

@Override
public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    ball.paint(g2d);
}

...

while (true) {
    repaint();
    Thread.sleep(10);
}

重绘不够频繁。但是,如果我将鼠标移到窗口顶部,它会更频繁地重新开始重绘。按下键盘上的按钮也会加快速度。

我使用Arch i3wm

Window

1 个答案:

答案 0 :(得分:2)

不要信任互联网上的指南。有时候想想自己。

这是错误的向导。问题是该算法是错误的。我们只需更频繁地绘制,而不是更新我们的世界。

这是一个愚蠢的实现。在并发性方面应该是非常错误的。

Timer timer1 = new Timer(1, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        game.repaint();
    }
});
timer1.start();

Timer timer2 = new Timer(10, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        game.move();
    }
});
timer2.start();