将光标固定在屏幕中间?

时间:2016-02-05 10:06:27

标签: java lwjgl

我正在尝试制作类似于我的世界的3D游戏,但我似乎不知道如何将鼠标固定到屏幕的中心?我正在使用lwjgl来处理鼠标输入。我只想让鼠标光标停留在我创建的窗口的中间。我看到lwjgl鼠标类中有一个Mouse.grab方法,但是当我将它设置为true时,它似乎没有做任何事情。

1 个答案:

答案 0 :(得分: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()

希望这有帮助!