我正在尝试用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;
}
xoffset
和yoffset
永远不等于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!