我尝试在背景触摸时关闭对话框,但它始终处于其他状态
stage.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if(stage.hit(x,y,true).equals(bg)) {
System.out.println("in th if");
dialog.addAction(rotateTo(90, .30f, Interpolation.smooth2));
dialog.hide();
}
else {
System.out.println("int the else");
}
return true;
}
});
答案 0 :(得分:1)
我认为这样可行,但没有测试。
对话框已经设置为接收所有touchDown输入,即使触摸超出其范围也是可见的,所以如果触摸超出其界限,只需给它一个隐藏它的监听器:
dialog.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
if (x < 0 || x > dialog.getWidth() || y < 0 || y > dialog.getHeight()){
dialog.hide();
}
return true;
}
});
这假定dialog
是final或成员字段,因此您可以从侦听器访问它。
我认为您的代码无法正常工作的原因是,stage.hit(...)
将始终返回dialog
,无论坐标如何,因为对话框设置为吸收所有输入。