Java applet使用双缓冲区闪烁

时间:2013-03-25 14:19:24

标签: java applet

我正在制作一个侧卷轴游戏。为了防止在我的游戏中闪烁,我开始使用后备缓冲器来获得更流畅的图形。它解决了大部分问题,但是,如果我将角色移动足够长的时间,屏幕会开始闪烁。 I read about the problem here,但它没有详细说明如何修复此垂直消隐间隔。据我所知,它实际上并不是“闪烁”,而是因为旧版画在旧版上而更“撕裂”。有没有办法避免这种“撕裂”?

谢谢!

2 个答案:

答案 0 :(得分:0)

我会在评论中回答,但有太多细节。以下代码几乎完全来自applet,我必须以与现在相同的方式限制FPS(除了它是在mouseMove而不是keyPressed上)。

private long lastDrawTime = 0;

public void keyPressed(KeyEvent e) {
    if (Calendar.getInstance().getTimeInMillis() - lastDrawTime < 20) return;
    //do whatever needs to be done before redrawing
    draw();
    lastDrawTime = Calendar.getInstance().getTimeInMillis();
}

这里发生的是有一个实例变量lastDrawTime,用于存储上次重绘的时间。将此变量与在任何绘图发生之前触发的keyPressed事件的当前时间进行比较。如果时间差小于允许的间隔(在这种情况下为20毫秒,或每秒50帧),则函数返回并且不进行绘制或更新。但是,如果已经过了足够的时间,则完成所有正常操作,并将当前时间存储在变量中。

答案 1 :(得分:0)

您需要实现独立于可变FPS的恒定游戏速度。 This Article详细说明了如何执行此操作。