我已經到了我的應用程序中使用LibGDX構建的情景,我需要相機能夠旋轉,並且也可以由用戶移動,以及能夠被縮放。我的相機控制移動和縮放相機的工作非常漂亮,但是,當相機旋轉時,相機將根據該旋轉進行移動。例如,如果相機向左旋轉45度,並且用戶向右拖動以移動相機,則相機將向右上方移動,因爲這是相機右側正指向的位置。相反,我需要相機始終相對於屏幕/用戶輸入移動,而不管其旋轉。LibGDX移動一個旋轉的相機
我對這個問題有一個解決方案,那就是簡單地使用「世界座標」來定位相機,而不是基於我現在嘗試使用的「窗口座標」。這會產生令人不愉快的用戶體驗,因爲它會使相機變得相當不連貫,並導致我的縮放系統出現問題。我認爲我可以用很多調整來修補這些問題,但是,因爲使用窗口座標已經非常平滑,所以我更願意去那條路線。
我懷疑有一個優雅的解決方案,看似簡單的問題,我可以做一個矩陣或沿着這些線的簡單計算,但我在OpenGL的知識仍然非常缺乏,我似乎無法弄清楚什麼確切需要發生修復它。任何更熟悉OpenGL和所有這些矩陣的人的想法都將不勝感激!
===編輯===
用來在這裏舉行的值的對象基本上只是我的Vector2,這是在應用程序的不同部分所要求的自己的版本。我不太清楚0.7f在那裏的確切原因,但大概是降低運動的敏感度,如果我將它移除,問題仍然存在。
camera.position.set(cameraStartPosition.getX() - ((zoomCurrentPosition.getX() - zoomStartPosition.getX()) * 0.7f), cameraStartPosition.getY() + ((zoomCurrentPosition.getY() - zoomStartPosition.getY()) * 0.7f), 0);
cameraStartPosition - 攝像頭在用戶開始移動時的X座標和Y座標。
zoomStartPosition - 初始觸摸啓動變焦
zoomCurrentPosition的X和Y座標 - 將X和Y座標,其中控制所述變焦觸摸目前是
在這些x和y值直接從touchDown和touchDragged方法中獲取。如果我將代碼放在下面的代碼後面,代碼就會創建我在原文中提到的問題,它會按照它應該的方式移動,但非常不連貫。
Vector3 vector = new Vector3(x, y, 0);
camera.unproject(vector);
x = (int) vector.x;
y = CanvasAnywhereMain.HEIGHT - (int) vector.y;
您可以添加一段代碼,顯示您現在如何移動/旋轉攝像頭嗎? –
我的輸入代碼在這一點上相當大,所以現在我只提出移動相機本身的線,以及我用來將x和y轉換爲「世界空間」的塊,主要用於應用程序中的其他觸摸事件。我很高興根據需要發佈更多內容,我只是不想發佈大量不必要的代碼。此外,就目前而言,我只是使用camera.rotate(value)旋轉相機。由於這些問題,我還沒有建立適當的控制系統。 – Synthetik