[英]Java applet flickering with double buffer
我正在做侧滑游戏。 为了防止游戏中出现闪烁,我开始使用后缓冲来获得更流畅的图形。 它解决了大多数问题,但是,如果我将角色移动足够长时间,屏幕就会开始闪烁。 我在这里阅读了有关该问题的信息,但未详细说明如何解决此垂直消隐间隔。 我知道,这实际上并不是“忽悠”,而是随着新的涂在旧的上而更加“撕裂”。 有什么办法可以避免这种“撕裂”?
谢谢!
我本来会在评论中回答的,但是对此有太多细节。 以下代码几乎完全取自一个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的恒定游戏速度。 本文详细介绍了如何执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.