LibGDX游戏:在调用touchDown时检查按钮是否被触摸

时间:2014-02-20 01:18:07

标签: java android button touch libgdx

我目前正在为Android设备制作一个libGDX游戏。我希望有一个方法在调用touchDown时调用函数,但是在单击按钮时不调用。这是因为我正在为炮塔设置目标,单击该按钮时不应旋转。

我目前的代码是

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED
            && state != STATE.EXITMENU && !slowButton.isOver()
            && !pauseButton.isPressed())
        turret.setTargetAngle(screenX, screenY);
    return true;
}

这会覆盖我的类实现的InputProcessor类中的函数。

此代码有效:

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED
            && state != STATE.EXITMENU && !slowButton.isPressed()
            && !pauseButton.isPressed())
        turret.setTargetAngle(screenX, screenY);
    return true;
}

touchDragged的工作原理但touchDown并不表示按钮在第一个实例之后才被标记为“已按下”。

我也尝试过使用Button.isOver()而不是Button.isPressed(),但这仍然没有按预期工作。

有人有任何提示吗?

1 个答案:

答案 0 :(得分:2)

您可以使用hit(x, y, touchable)方法  在按钮上。它在提供的坐标处找到最深的演员。你应该从舞台上调用它,如果它返回pauseButton,则单击pauseButton。如果它返回的内容不是slowButton或null,则不会单击它。有关命中检测的更多信息on the Libgdx wiki

所以你会做这样的事情:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED
            && state != STATE.EXITMENU && !slowButton.isOver()
            && !stage.hit(screenX, screenY, true).equals(pauseButton))
        turret.setTargetAngle(screenX, screenY);
    return true;
}

但是,您可能需要将屏幕坐标转换为舞台坐标,具体取决于您的坐标系设置。