gpt4 book ai didi

java - LibGDX 游戏 : Check if button is touched when touchDown is called

转载 作者:行者123 更新时间:2023-11-29 21:14:08 26 4
gpt4 key购买 nike

我目前正在为 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() 但这仍然无法按预期工作。

有人有什么建议吗?

最佳答案

您可以使用方法hit(x, y, touchable) 在按钮上。它在提供的坐标处找到最深的 Actor 。您应该从舞台调用它,如果它返回 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;
}

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

关于java - LibGDX 游戏 : Check if button is touched when touchDown is called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21896143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com