我正在嘗試製作一個類似「我的世界」的3D遊戲,但我似乎不知道如何將鼠標移動到屏幕中央?我使用lwjgl來處理鼠標輸入。我只想讓鼠標光標停留在我創建的窗口中間。我看到在lwjgl鼠標類中有一個Mouse.grab
方法,但是當我將它設置爲true時,它似乎沒有任何操作。將光標固定在屏幕中間?
0
A
回答
0
首先,讓我們看看Mouse.grab(true)
做什麼。有兩種截然不同的操作,全部分組爲一個呼叫。第一個是將光標固定在屏幕中央,第二個是使光標不可見。這兩種操作相結合都會將光標鎖定在屏幕的中心。爲了得到輸入(我假設你已經使用這種方法進行相機移動),你必須使用鼠標類的差分位置函數Mouse.getDX()
和Mouse.getDY()
,它們返回光標光標位置的變化(有效地多少用戶已經移動鼠標)這個框架。
現在,在3D遊戲中,您傾向於使用十字準線。這不會被誤認爲是鼠標。十字準線是繪製在場景(以及幀緩衝區(屏幕)的中心)上的UI元素,其給出了玩家關於屏幕中心位置的參考點,並且在射擊遊戲中,子彈他們會拍攝出來,讓他們瞄準。
在這裏,我將提供一個簡短的例子,說明如何實現這種效果。 如果你使用直接模式和固定管道(GL11)或後續版本,這個代碼將會有很大的不同,這取決於你如何做圖形,因此,這將主要是僞代碼。隨意指定你正在使用的渲染方法,我可以給你一個更詳細的例子。
// Your 3D render code here
float aspectRatio = Dislay.getWidth()/(float) Display.getHeight();
// will depend on your rendering implementation
// however the concept stays the same, you switch from a perspective view
// to an orthogonal view
switch_projection_matrix_to_ortho(-1 * aspectRatio, 1 * aspectRatio, -1, 1, -1, 1);
// Apply a crosshair texture
crossahir_texture.bind()
// Draw a quad
quad.draw()
希望這有助於!
但我有一個問題..我沒有把鼠標固定到屏幕的中心,但Mouse.getDX或Mouse.getDY不起作用!任何你可以幫助的方式? –
嘗試打印出你從三角函數'System.out.printf(「(%d,%d)\ n」,Mouse.getDX(),Mouse.getDY());'得到的值並確保你正在調用每個函數一次,因爲調用它會導致重置值 – claudehenry