Libgdx Listener多次进入和退出火灾

时间:2016-03-31 14:20:54

标签: java button libgdx clicklistener overlap2d

我目前正在尝试实现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也用于调试^^ 我仍然不知道为什么它会激活出口并进入事件...... 有人有个主意吗?

谢谢:)

1 个答案:

答案 0 :(得分:2)

您需要检查传递到pointerenter方法的exit。如果pointer-1,则鼠标光标刚刚开始或停止悬停在actor的边界上。 pointer不是-1,然后演员刚刚收到点击或点击发布(分别为enterexit)。

因此,如果您将光标移到按钮上并单击然后离开,则会收到两个enter个事件和两个exit个事件。

  • 悬停 - >用指针-1
  • 输入
  • 点击 - >用指针0输入
  • 发布点击 - >退出指针0
  • 移开光标 - >退出 用指针-1

此外,使用ClickListener时,请确保在覆盖方法时调用超级方法,这样它才能正常运行!