簡體   English   中英

LWJGL3中的第三人稱攝影機動作

[英]3rd person camera movement in LWJGL3

最近,我一直在關注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;
    }
}

我只是不確定這是否行得通,而且我遺漏了一些確實很明顯的東西,或者無法通過這種方式完成。 我是游戲開發人員的新手。

設法找出問題所在,我要做的就是在計算中按下鼠標后再次調用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM