从静态方法返回的值不正确

时间:2017-08-18 18:46:31

标签: java opengl lwjgl glfw

我在LWJGL中获取鼠标输入有问题。这是我获取输入的代码:

public class MouseButInput extends GLFWMouseButtonCallback {

    public static boolean[] buttons = new boolean[65536];

    public static boolean isButtonPressed(int button) {
        return buttons[button];
    }

    public static boolean isButtonPressedRelease(int button) {
        boolean isPressed = buttons[button];
        if (isPressed) System.out.println("TEST 1");
        buttons[button] = false;
        if (isPressed) System.out.println("TEST 2");
        return isPressed;
    }

    @Override
    public void invoke(long window, int button, int action, int mods) {
        if (action == GLFW_PRESS) buttons[button] = true;
        else buttons[button] = false;
    }
}

我原本遇到一个问题,当我点击一次时,isButtonPressed()方法会在接下来的5-10个更新中返回true,因为按钮实际按下了多长时间。我创建了isButtonPressedRelease()方法,如果按下按钮则返回true,然后将buttons中的按钮值设置为false,这样下一次更新就不会返回true。问题是,它似乎永远不会回归真实。在我返回它之前,我输入了一些打印行来测试isPressed是否为真。如果我切换回使用isButtonPressed()方法,一切都按预期工作。

不确定我在这里缺少什么......我的猜测是它与混合静态和非静态方法/变量有关?

此外,我在这里调用方法:

public void update() {
    isHover = (aabb.intersectsPoint(MousePosInput.pos.x, MousePosInput.pos.y)) ? true : false;
    if (MouseButInput.isButtonPressedRelease(GLFW_MOUSE_BUTTON_1) && isHover && onclick != null) {
        ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Button clicked.");
        onclick.actionPerformed(evt);
    } else {
    }
}


修改

为了澄清,当我的应用程序启动时,运行以下代码:

private GLFWMouseButtonCallback buttonCallback;
...
glfwSetKeyCallback(window, keyCallback = new KeyInput());

现在,每次按下鼠标按钮时都会自动调用invoke。我目前没有使用isButtonPressed(),只使用isButtonPressedRelease()。在MouseButInput类之外使用这两个方法来查看是否按下了一个键,唯一的区别是isButtonPressedRelease需要进入buttons数组并设置我要检查的按钮的值假的。

0 个答案:

没有答案