java – LWJGL 3获取光标位置
发布时间:2020-12-14 05:58:30 所属栏目:Java 来源:网络整理
导读:我如何获得光标的位置?我查看了GLFW的文档,并且有一个方法glfwGetCursorPos(window, xpos, ypos)但 Java没有指针,所以当我在 Java中尝试这个方法时,有DoubleBuffers作为参数.现在我写这样的东西: public static double getCursorPosX(long windowID){ Doub
我如何获得光标的位置?我查看了GLFW的文档,并且有一个方法glfwGetCursorPos(window,& xpos,& ypos)但
Java没有指针,所以当我在
Java中尝试这个方法时,有DoubleBuffers作为参数.现在我写这样的东西:
public static double getCursorPosX(long windowID){ DoubleBuffer posX = null; DoubleBuffer posY = null; glfwGetCursorPos(windowID,posX,posY); return posX != null ? posX.get() : 0; } posX为null,我无法弄清楚为什么(是的,我在我的显示类中设置回调). 解决方法
Java不直接支持指针,因此LWJGL使用缓冲区作为变通方法.这些只是包装一个可以通过对象上的方法读取和写入的内存地址.这允许您将缓冲区传递给将值写入其中的函数,以便您可以读取这些值.
这里的关键点是你实际上必须事先创建一个缓冲区来存储值. public static double getCursorPosX(long windowID) { DoubleBuffer posX = BufferUtils.createDoubleBuffer(1); glfwGetCursorPos(windowID,null); return posX.get(0); } BufferUtils.createDoubleBuffer(length)是一个创建缓冲区的实用程序函数.不同的基元有不同的缓冲区,如int,long,char,float,double等.在这种情况下,我们需要一个可以存储双精度的缓冲区.我们传递给方法的数字(1)是缓冲区应该能够存储的值的数量.我们可以使用更大的缓冲区来存储多个值,就像在数组中一样,但在这里我们只需要一个值. get(index)方法返回给定索引处的值.我们只想读取第一个值,因此我们指定0.您还可以使用put(index,value)将值存储在缓冲区中. 注意:如果要同时获取x和y值,可能会尝试执行以下操作: DoubleBuffer coords = BufferUtils.createDoubleBuffer(2); glfwGetCursorPos(windowID,coords,coords); double x = coords.get(0); double y = coords.get(1); 但是,这不会按预期工作:它会将y值写入索引0并在索引1处留下垃圾(读取:随机)值.如果要获取两个坐标,则必须为每个坐标创建一个单独的缓冲区. DoubleBuffer xBuffer = BufferUtils.createDoubleBuffer(1); DoubleBuffer yBuffer = BufferUtils.createDoubleBuffer(1); glfwGetCursorPos(windowID,xBuffer,yBuffer); double x = xBuffer.get(0); double y = yBuffer.get(0); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |