最近,我一直在关注ThinMatrix的OpenGL教程,以Java编写游戏。但是,由于他使用的是LWJGL2,而我使用的是LWJGL3,所以有一些差异需要一些解决方法。我特别关注在“玩家”上创建第三人称角色。
我已经做了足够的工作,以至于当我单击并拖动屏幕时,相机会像应该的那样围绕播放器旋转。但是,当我松开并移动鼠标进行另一次旋转时,它不会从位置继续,而是相对于第二次单击的位置进行重置。
由于LWJGL3没有mouse.getDY()或mouse.getDX(),因此我在DisplayManager类中制作了一个,就像这样:
public float getDY() {
newMouseY = (float) getMouseY();
float dy = newMouseY - oldMouseY;
oldMouseY = newMouseY;
return dy;
}
public float getDX() {
newMouseX = (float) getMouseX();
float dx = newMouseX - oldMouseX;
oldMouseX = newMouseX;
return dx;
}
我在相机类中这样称呼它:
private void calculatePitch(DisplayManager window) {
if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
float pitchChange = window.getDY() * 0.2f;
pitch -= pitchChange;
}
}
private void calculateAngleAroundPlayer(DisplayManager window) {
if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
float angleChange = window.getDX() * 0.3f;
angleAroundPlayer -= angleChange;
}
}
我只是不确定这是否行得通,而且我确实遗漏了一些明显的东西,或者无法通过这种方式完成。我是游戏开发人员的新手。
答案 0 :(得分:0)
设法找出问题所在,我要做的就是在计算中按下鼠标后再次调用getDX()和getDY()函数:
private void calculatePitch(DisplayManager window) {
if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
float pitchChange = window.getDY(window) * 0.2f;
pitch += pitchChange;
}
window.getDY(window);
}
private void calculateAngleAroundPlayer(DisplayManager window) {
if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
float angleChange = window.getDX(window) * 0.3f;
angleAroundPlayer -= angleChange;
}
window.getDX(window);
}