在Java中从GLFW获取鼠标坐标时出现的问题(可能是bytebuffer问题)

问题描述:

我最近从LWJGL 2切换到LWJGL 3,并且在文档和组装程序使用它几个小时后,我有这个代码。请注意,方法中的代码都是静态的,并且Eclipse不会对与此相关的代码提出任何问题。另外请注意,将其从allocateDirect更改为分配不起作用。在Java中从GLFW获取鼠标坐标时出现的问题(可能是bytebuffer问题)

//At the beginning of the class declaration: 
 

 
    public static ByteBuffer mouseXb=ByteBuffer.allocateDirect(8), mouseYb=ByteBuffer.allocateDirect(8); 
 
    public static double mouseX=0,mouseY=0; 
 

 
     //Then later, in another method in the same class 
 

 
    \t glfwPollEvents(); 
 
    \t glfwGetCursorPos(window, mouseXb, mouseYb); 
 
    \t mouseX=mouseXb.getDouble(); 
 
    \t mouseY=mouseYb.getDouble(); 
 
    \t System.out.println(mouseX+", "+mouseY); 
 
    \t mouseXb.flip(); 
 
    \t mouseYb.flip();

奇怪的是,虽然,我得到这样的价值观: (另请注意,当鼠标在窗口中四处移动,他们只变了,从来没有在它的外面,也没有当鼠标没有移动)

2.0857E-317, 2.604651E-317 
 
3.121831E-317, 2.604651E-317 
 
5.1940924E-317, 2.604651E-317 
 
7.2664804E-317, 2.604651E-317 
 
6.7490474E-317, 2.0865855E-317 
 
4.6771653E-317, 7.785178E-317 
 
5.19561E-317, 5.7129166E-317

好的,我解决了这个问题,但是我会在这里留下这个帖子,以防其他人有同样的问题。事实证明,GLFW使用的是小端,而Bytebuffers默认是大端。

您可以通过添加此解决该问题(如果你使用我的代码):mouseYb.order(ByteOrder.LITTLE_ENDIAN); mouseXb.order(ByteOrder.LITTLE_ENDIAN);

我还是很新的LWJGL 3自己,遇到了一些麻烦的字节缓冲区。经过一番四处张望,我发现这个网页:LWJGL - Bindings FAQ

在org.lwjgl包中有一个名为BufferUtils的类,该类具有生成ByteBuffer的静态函数。从源代码中,我注意到他们所谓的顺序方法也一样,就像你的修复,尽管有不同的参数:

public static ByteBuffer createByteBuffer(int capacity) 
{ 
    return BUFFER_ALLOCATOR.malloc(capacity).order(ByteOrder.nativeOrder()); 
} 

的FAQ建议使用此选项。显然你的代码现在工作正常,但我只是想你应该知道以防万一你在将来遇到任何问题。

另外,感谢您的代码片段,我不知道如何使用ByteBuffers,现在我做到了!