Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx侦听器enter和exit多次激发_Java_Button_Libgdx_Clicklistener_Overlap2d - Fatal编程技术网

Java Libgdx侦听器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){

我目前正在尝试实现clickListener。 我发现了一个很棒的运行时工具,叫做Overlapp2D,在那里我制作了一些漂亮的按钮并加载了它们,一切都很好。 因为我想为我的按钮制作一个“悬停”效果,所以我使用了ClickListener和方法enter和exit,看起来是这样的:

      @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时,请确保在重写方法时通过调用超级方法,这样它将正常工作