移动元素时延迟

你如何看到我的鼠标比widget更快一点。

我的运动algorithm是:

cursorPositionPrev.set(cursorPosition); cursorPosition.set(getCurrentPos()); ... Vector2f delta = new Vector2f(cursorPosition).sub(cursorPositionPrev); widget.getPosition().add(delta); 

我正在使用LWJGL和我自己的GUI解决scheme。

这里是事件处理器部分的视觉结构。 一个线程用于处理用户生成的事件,另一个线程呈现当前的gui状态。

即使渲染和处理事件在一个线程中,问题仍然存在。

例

那么我能做些什么来避免这种延迟,并使小部件跟上鼠标移动?

例

所以,你说,当你更新cursorPositionvariables时,你也会更新cursorPositionPrevvariables。 这不是一个好主意,这可能是它比你的鼠标慢一点的原因之一。

您的更新方法每秒被调用60次,但鼠标监听器可以在一秒钟内多次运行。

那么,让我们想象一下:鼠标移动3个像素,您将鼠标位置正确设置在前一个位置。

更新方法仍然不会运行,但鼠标移动另外3个像素,并再次调用监听器,您正确设置鼠标位置,但以前的位置将是错误的。

更新方法运行,看到前一个位置和当前位置之间的距离只有3个像素,而用户移动他的鼠标6个像素。

为了解决这个问题,你需要把你更新前一个位置的代码行移动到更新方法的末尾。

我发现原因是我的事件队列实现,第二个原因是我使用OS游标(OS游标是硬件加速)。

鼠标位置是从GLFW获得的当前鼠标位置,滞后 – 来自GLFW的当前位置和来自事件系统的差异。 这里是赞同:

LAG示例1 LAG示例2 LAG例子3