繁体   English   中英

Java Applet使用双缓冲区闪烁

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM