Java Libgdx侦听器enter和exit多次激发
我目前正在尝试实现clickListener。 我发现了一个很棒的运行时工具,叫做Overlapp2D,在那里我制作了一些漂亮的按钮并加载了它们,一切都很好。 因为我想为我的按钮制作一个“悬停”效果,所以我使用了ClickListener和方法enter和exit,看起来是这样的:Java Libgdx侦听器enter和exit多次激发,java,button,libgdx,clicklistener,overlap2d,Java,Button,Libgdx,Clicklistener,Overlap2d,我目前正在尝试实现clickListener。 我发现了一个很棒的运行时工具,叫做Overlapp2D,在那里我制作了一些漂亮的按钮并加载了它们,一切都很好。 因为我想为我的按钮制作一个“悬停”效果,所以我使用了ClickListener和方法enter和exit,看起来是这样的: @Override public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor){
@Override
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor){
playButton.setLayerVisibility("MouseOver", true);
playButton.setLayerVisibility("pressed", false);
playButton.setLayerVisibility("normal", false);
System.out.println("Actor enter : "+fromActor);
}
@Override
public void exit(InputEvent event, float x, float y, int pointer, Actor toActor){
playButton.setLayerVisibility("MouseOver", false);
playButton.setLayerVisibility("pressed", false);
playButton.setLayerVisibility("normal", true);
System.out.println("Actor exit : "+toActor);
}
@Override
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button){
System.out.println("touchdown");
return true;
}
@Override
public void touchUp (InputEvent event, float x, float y, int pointer, int button){
System.out.println("touchup");
}
这就是问题所在,触地和触地被称为一次,当我按下按钮或向上触地时。但在触地和触地事件O.O期间,也会调用enter和exit方法,看起来是这样的:
touchdown
Actor enter : null
Actor exit : Image
Actor enter : Image
touchup
Actor exit : Image
Actor exit : Image
Actor enter : Image
Actor exit : Image
Actor enter : Image
我还打印了fromActor和toActor以进行调试^^
我仍然不知道为什么它会如此频繁地触发退出和进入事件。。。
有人有主意吗
谢谢:)您需要检查传递到
enter
和exit
方法中的指针。如果指针
为-1
,则鼠标光标刚开始或停止悬停在参与者的边界上。如果指针
不是-1
,则参与者只收到一个向下点击或点击释放(对于分别输入
和退出
)
因此,如果您将光标移动到按钮上,然后单击并移开,您将获得两个enter
事件和两个exit
事件
- 悬停->用指针输入-1
- 单击向下->用指针0输入
- 释放单击->带指针0退出
- 将光标移开->退出
使用指针-1
另外,在使用ClickListener时,请确保在重写方法时通过调用超级方法,这样它将正常工作