Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX游戏:检查触地时按钮是否被触碰_Java_Android_Button_Touch_Libgdx - Fatal编程技术网

Java LibGDX游戏:检查触地时按钮是否被触碰

Java LibGDX游戏:检查触地时按钮是否被触碰,java,android,button,touch,libgdx,Java,Android,Button,Touch,Libgdx,我目前正在为Android设备制作一款libGDX游戏。我想有一个方法,当触地被调用时调用函数,而不是当按钮被点击时。这是因为我正在为炮塔设置目标,单击按钮时炮塔不应旋转 我现在掌握的密码是 @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { if (state != STATE.GAMEOVERLOST && state != STATE.PAUS

我目前正在为Android设备制作一款libGDX游戏。我想有一个方法,当触地被调用时调用函数,而不是当按钮被点击时。这是因为我正在为炮塔设置目标,单击按钮时炮塔不应旋转

我现在掌握的密码是

@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;
}
touchDrawed可以工作,但touchDown并不表示按钮在第一次执行后才被标记为“按下”

我也尝试过使用Button.isOver()代替Button.isPressed(),但这仍然没有达到预期效果

有人有什么建议吗?

你可以用这个方法 按按钮。它在提供的坐标处找到最深的参与者。您应该从stage调用它,如果它返回pauseButton,那么pauseButton被单击。如果它返回的内容不是slowButton或null,则它没有被单击。更多关于命中检测的信息

所以你可以这样做:

@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;
}
但是,您可能需要将屏幕坐标转换为舞台坐标,具体取决于您的坐标系设置。

我刚刚检查了该舞台。hit(screenX,screenY,true)=null有效,因为按钮是舞台上唯一的演员。谢谢你给我指明了正确的方向!