修改后退出事件

时间:2014-02-09 00:35:35

标签: java libgdx

我在LibGDX中遇到以下问题。当您移出Actor时,当您离开ClickListener的边界框时,您会从Actor和退出事件中获得enter事件。我保留了一个布尔mouseOver,它告诉我光标是否在这些事件的Actor之上。但是当您单击Actor并释放鼠标后,会发出退出事件。因此,在释放鼠标单击后,就好像光标不再位于Actor上,而它是。

如何为布尔mouseOver保持正确的状态?换句话说:如上所述,当我发生TouchUp事件时,如何知道鼠标是否在我的Actor上。

3 个答案:

答案 0 :(得分:1)

你可以覆盖 touchUp 并在那里将布尔 mouseOver 设置为true。

@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button){
    ...
    mouseOver = true;
}

答案 1 :(得分:0)

到目前为止,我发现的最好的黑客是查看出口中的指针arg并输入覆盖并查看是否单击了鼠标。我仍在寻找更清洁的解决方案。

    addListener(new ClickListener() {
        @Override
        public void enter(InputEvent event, float x, float y, int pointer,
                Actor fromActor) {
            mouseOver = pointer == -1 ? true : mouseOver;
            super.enter(event, x, y, pointer, fromActor);
        }

        @Override
        public void exit(InputEvent event, float x, float y, int pointer,
                Actor toActor) {
            mouseOver = pointer == -1 ? false : mouseOver;
            super.exit(event, x, y, pointer, toActor);
        }
}

答案 2 :(得分:0)

仅当退出的Actor toActor 不是您添加侦听器的actor时,才将 mouseOver 设置为false:

myActor.addListener(new ClickListener() {
  ...
  @Override
  public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
    ...
    if (toActor != myActor) // and even myActor's children if it is a Group
      mouseOver = false;
  }
});