在LWJGL3(GLFW)上获取鼠标滚轮

时间:2019-10-06 01:14:16

标签: java lwjgl glfw

我正在尝试用LWJGL3制作的游戏在玩家周围制作3D相机。 使用鼠标滚轮,您可以放大播放器。 我的功能应该如何?

如何查询每个事件的鼠标滚轮值。

        glfwSetScrollCallback(window.getWindowHandle(), (windowHandle, xoffset, yoffset) -> {
            currentMouseWheel.x = xoffset;
            currentMouseWheel.y = yoffset;
        });

我根据上一次调用获取Scroll delta的函数: (PS:输入被称为每个游戏循环)

    public void input(Window window) {
        dMouseWheel.x = 0;
        dMouseWheel.y = 0;
        if (inWindow) {
            double dx = currentMouseWheel.x - previousMouseWheel.x;
            double dy = currentMouseWheel.y - previousMouseWheel.y;
            if (dx != 0) {
                dMouseWheel.x = (float) dx;
            }
            if (dy != 0) {
                dMouseWheel.y = (float) dy;
            }
        }
        previousMouseWheel.x = currentMouseWheel.x;
        previousMouseWheel.y = currentMouseWheel.y;
    }

xoffsetyoffset永远不等于0。

我必须在滚轮上施加很大的推动力才能看到​​增量变化。

我该怎么办? 你能举个例子吗?

更新:我发现了! 怎么做:

首先设置2个向量变量:

private Vector2d currentMouseWheel;
private Vector2f dMouseWheel;

然后在您的Scroll回调中:

glfwSetScrollCallback(window.getWindowHandle(), (windowHandle, xoffset, yoffset) -> {
 currentMouseWheel.x = xoffset;
 currentMouseWheel.y = yoffset;
});

然后在每次游戏循环迭代中,您调用一个函数来对其进行更新

public void input() {
 dMouseWheel.x = 0;
 dMouseWheel.y = 0;

 if (inWindow) {
 dMouseWheel.x = (float) currentMouseWheel.x;
 dMouseWheel.y = (float) currentMouseWheel.y;
 }

 currentMouseWheel.x = 0;
 currentMouseWheel.y = 0;
}

然后,您将拥有带有正确Scroll delta的dMouseWheel!

0 个答案:

没有答案