2014-12-03 30 views
0

我最近從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

回答

0

好的,我解決了這個問題,但是我會在這裏留下這個帖子,以防其他人有同樣的問題。事實證明,GLFW使用的是小端,而Bytebuffers默認是大端。

您可以通過添加此解決該問題(如果你使用我的代碼):mouseYb.order(ByteOrder.LITTLE_ENDIAN); mouseXb.order(ByteOrder.LITTLE_ENDIAN);

0

我還是很新的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,現在我做到了!