Java 补强后退出比赛

Java 补强后退出比赛,java,libgdx,Java,Libgdx,我在LibGDX中遇到以下问题。当您移动到一个Actor上时,您将从ClickListener中获得enter事件,当您移出Actor的边界框时,将获得exit事件。我保留一个布尔鼠标盖,告诉我光标是否在带有这些事件的参与者上。但是,当您单击Actor并释放鼠标后,会出现一个退出事件。因此,在释放鼠标点击后,就好像光标不再位于演员上方,而它是 如何保持布尔鼠标盖的正确状态?换言之:在上面的场景中,当发生触碰事件时,我如何知道鼠标是否在我的演员身上。您可以覆盖触碰,并将布尔值鼠标悬停设置为true

我在
LibGDX
中遇到以下问题。当您移动到一个
Actor
上时,您将从
ClickListener
中获得enter事件,当您移出
Actor
的边界框时,将获得exit事件。我保留一个布尔鼠标盖,告诉我光标是否在带有这些事件的
参与者上。但是,当您单击
Actor
并释放鼠标后,会出现一个退出事件。因此,在释放鼠标点击后,就好像光标不再位于演员上方,而它是


如何保持布尔鼠标盖的正确状态?换言之:在上面的场景中,当发生触碰事件时,我如何知道鼠标是否在我的演员身上。

您可以覆盖触碰,并将布尔值鼠标悬停设置为true

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

到目前为止,我发现最好的方法是查看出口中的指针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);
        }
}

仅当退出的参与者不是您添加侦听器的参与者时,才将鼠标悬停设置为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;
  }
});

这不起作用,因为在修补事件之后立即调用退出事件。在退出事件中,我将mouseOver设置为false。