Java小程序闪烁与双缓冲区



我正在制作一款横向卷轴游戏。为了防止游戏中的闪烁,我开始使用backbuffer来获得更平滑的图像。它解决了大部分问题,但是,如果我移动角色的时间过长,屏幕就会开始闪烁。我在这里读到了这个问题,但它没有详细说明如何修复这个垂直的空白间隔。我明白它实际上不是"闪烁",而是"撕裂",因为新的东西被涂在旧的东西上。有没有办法避免这种"撕裂"?

谢谢!

我本来可以在评论中回答的,但是有太多的细节。下面的代码几乎完全取自一个applet,在这个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帧,则函数返回,并且不进行绘图或更新。但是,如果经过了足够的时间,则所有正常的事情都将完成,并且当前时间将存储在变量中。

你需要实现独立于可变FPS的恒定游戏速度。本文详细介绍了如何这样做。

最新更新