LibGDX.scene2d 中的输入条件检查错误
Wrong condition checking with input in LibGDX.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("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");
}
});
但实际上相同的代码可以正常工作:
registerButton.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent e, float x, float y, int p, int b) {
return true;
}
@Override
public void touchUp(InputEvent e, float x, float y, int p, int b) {
if(x > registerButton.getX() && x < registerButton.getRight() && y > registerButton.getY() && y < registerButton.getTop()) {
registerWindow.setVisible(true);
baseWindow.setVisible(false);
}
}
});
单击 enterButton 后,我得到了使用 LibGDX 日志记录的输出:
touched: down
touched: up
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 上设置调试标志,以便您可以使用 enterButton.debug();
查看点击边界的实际位置
我正在使用 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");
}
});
但实际上相同的代码可以正常工作:
registerButton.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent e, float x, float y, int p, int b) {
return true;
}
@Override
public void touchUp(InputEvent e, float x, float y, int p, int b) {
if(x > registerButton.getX() && x < registerButton.getRight() && y > registerButton.getY() && y < registerButton.getTop()) {
registerWindow.setVisible(true);
baseWindow.setVisible(false);
}
}
});
单击 enterButton 后,我得到了使用 LibGDX 日志记录的输出:
touched: down
touched: up
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 上设置调试标志,以便您可以使用 enterButton.debug();