簡體   English   中英

從Java中的GLFW獲取鼠標坐標的問題(可能是字節緩沖區問題)

[英]problems with getting the mouse coordinates from GLFW in Java (potentially a bytebuffer issue)

我最近進行了從LWJGL 2到LWJGL 3的切換,在花了幾個小時研究文檔並組裝一個程序來使用它之后,我有了這段代碼。 請注意,這些方法中的代碼都是靜態的,並且Eclipse沒有給我與此相關的代碼問題。 另外,請注意,將其從allocateDirect更改為allocate無效。

  //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 glfwPollEvents(); glfwGetCursorPos(window, mouseXb, mouseYb); mouseX=mouseXb.getDouble(); mouseY=mouseYb.getDouble(); System.out.println(mouseX+", "+mouseY); mouseXb.flip(); 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使用Little Endian,而Bytebuffers是big endian。

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

我本人對LWJGL 3還是很陌生,並且在ByteBuffers方面遇到了一些麻煩。 經過一番環顧,我發現了以下頁面: LWJGL-Bindings FAQ

在org.lwjgl包中,有一個稱為BufferUtils的類,該類具有用於生成ByteBuffer的靜態函數。 從源代碼中,我注意到它們也調用了order方法,就像您的修復程序一樣,盡管具有不同的參數:

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

FAQ建議使用此選項。 顯然您的代碼現在可以正常工作,但我只是想您應該知道,以防將來遇到任何問題。

另外,感謝您的代碼片段,我不知道如何使用ByteBuffer,現在可以了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM