1

我正在制作一个横向卷轴游戏。为了防止在我的游戏中闪烁,我开始使用后缓冲来获得更流畅的图形。它解决了大部分问题,但是,如果我移动角色足够长的时间,屏幕就会开始闪烁。我在这里读到了这个问题,但没有详细说明如何解决这个垂直消隐间隔。我知道它实际上并不是“闪烁”,而是随着新的涂在旧的上而更加“撕裂”。有什么办法可以避免这种“撕裂”?

谢谢!

4

2 回答 2

0

我会在评论中回答,但有太多的细节。下面的代码几乎完全来自一个小程序,在这个小程序中我必须像现在一样限制 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 帧,则函数返回并且不进行绘制或更新。但是,如果经过了足够的时间,则所有正常的事情都已完成,并且当前时间存储在变量中。

于 2013-03-25T14:41:17.573 回答
0

您需要实现独立于可变 FPS 的恒定游戏速度。本文详细介绍了如何执行此操作。

于 2013-03-25T14:42:20.853 回答