我目前正在尝试实现clickListener。 我发现了一个运行时很棒的工具,它叫做Overlap2D,在那里我制作了一些漂亮的按钮并加载它们,一切正常。 因为我想做一个"悬停"对于我的按钮效果,我使用ClickListener和方法进入和退出,它看起来如此:
@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");
}
然后问题,触地得分和触摸调用被称为一次,当我触摸按钮或向上。但是,在触地得分和touchupo事件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也用于调试^^ 我仍然不知道为什么它会激活出口并进入事件...... 有人有个主意吗?
谢谢:)
答案 0 :(得分:2)
您需要检查传递到pointer
和enter
方法的exit
。如果pointer
为-1
,则鼠标光标刚刚开始或停止悬停在actor的边界上。 pointer
不是-1
,然后演员刚刚收到点击或点击发布(分别为enter
和exit
)。
因此,如果您将光标移到按钮上并单击然后离开,则会收到两个enter
个事件和两个exit
个事件。
此外,使用ClickListener时,请确保在覆盖方法时调用超级方法,这样它才能正常运行!