2016-02-05 54 views
0

我正在嘗試製作一個類似「我的世界」的3D遊戲,但我似乎不知道如何將鼠標移動到屏幕中央?我使用lwjgl來處理鼠標輸入。我只想讓鼠標光標停留在我創建的窗口中間。我看到在lwjgl鼠標類中有一個Mouse.grab方法,但是當我將它設置爲true時,它似乎沒有任何操作。將光標固定在屏幕中間?

回答

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() 

希望這有助於!

+0

但我有一個問題..我沒有把鼠標固定到屏幕的中心,但Mouse.getDX或Mouse.getDY不起作用!任何你可以幫助的方式? –

+0

嘗試打印出你從三角函數'System.out.printf(「(%d,%d)\ n」,Mouse.getDX(),Mouse.getDY());'得到的值並確保你正在調用每個函數一次,因爲調用它會導致重置值 – claudehenry