Java 使用LibGDX.scene2d中的输入检查错误的条件

Java 使用LibGDX.scene2d中的输入检查错误的条件,java,if-statement,libgdx,conditional-statements,scene2d,Java,If Statement,Libgdx,Conditional Statements,Scene2d,我正在用LibGDX.scene2d.ui为我的游戏构建一个GUI,当我试图处理输入时遇到了一个问题。我有下面的代码,当按下按钮但它不工作时,会发生一些事情: enterButton.addListener(new InputListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int p, int b) { Gdx.app.log("

我正在用LibGDX.scene2d.ui为我的游戏构建一个GUI,当我试图处理输入时遇到了一个问题。我有下面的代码,当按下按钮但它不工作时,会发生一些事情:

enterButton.addListener(new InputListener() {
        @Override
        public boolean touchDown(InputEvent e, float x, float y, int p, int b) {
            Gdx.app.log("touched", "down");
            return true;
        }
        @Override
        public void touchUp(InputEvent e, float x, float y, int p, int b) {
            Gdx.app.log("touched", "up");
            if(x > enterButton.getX() && x < enterButton.getRight() && y > enterButton.getY() && y < enterButton.getTop()) {
                Gdx.app.log("cond", "cursor on actor");
                if(validate(loginField.getText(), passField.getText())) {
                    Gdx.app.log("cond", "validated");
                    openMenu();
                }
            }
            Gdx.app.log("untouched", "up");
        }
    });

可能有什么问题?

您可以尝试使用ClickListener来检查触摸是否在范围内,例如:

enterButton.addListener(new ClickListener() {
    @Override
    public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
        return true;
    }

    @Override
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
        if (isOver()) {
            if(validate(loginField.getText(), passField.getText())) {
                openMenu();
            }
        }
    }
});

您还可以尝试在Actor上设置debug标志,以便使用
enterButton.debug()查看单击边界的实际位置

这里有什么问题,您想得到什么?你能解释一下吗?只需使用ChangeListener并重写已更改的方法来对按钮按下做出反应。
touched: down
touched: up
untouched: up
enterButton.addListener(new ClickListener() {
    @Override
    public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
        return true;
    }

    @Override
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
        if (isOver()) {
            if(validate(loginField.getText(), passField.getText())) {
                openMenu();
            }
        }
    }
});