我目前正在为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(),但这仍然没有按预期工作。
有人有任何提示吗?
答案 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;
}
但是,您可能需要将屏幕坐标转换为舞台坐标,具体取决于您的坐标系设置。