2016-03-31 4 views
2

Im в настоящее время пытается реализовать clickListener. Я нашел отличный инструмент с runtime, его назвал Overlap2D, там я сделал несколько приятных кнопок и загрузил их, все работает отлично. Потому что я хотел бы сделать эффект «парения» для моих кнопок, я использовал ClickListener с методами входа и выхода, это выглядит так:Libgdx Listener вводит и выдает огонь несколько раз

 @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"); 

     } 

И Heres проблема, приземление и TouchUp называются один раз, когда я касаюсь кнопки или вверх. Но вводить и методы выхода также называют во время приземления и touchupo Оо событие, которое выглядит так:

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 также для отладки ^^ И я до сих пор не знаю, почему он срабатывает выход и введите событие так много ... У кого-нибудь есть идея?

Спасибо :)

ответ

2

Вы должны проверить pointer, который прошел в enter и exit методов. Если pointer - -1, тогда курсор мыши только начинал или останавливался, зависав над границами актера. Это pointer не -1, тогда актер только что получил щелчок или щелкнул (для enter и exit соответственно).

Так что если вы переместите курсор над кнопкой и щелкните, а затем отодвиньтесь, вы получите два события enter и два события exit.

  • Hover -> вводится с указателем -1
  • Нажмите вниз -> введен с указателем 0
  • Release клик -> вышел с указателем 0
  • Перемещение курсора в сторону -> выход из с указателем -1

Кроме того, при использовании ClickListener убедитесь, что вы вызываете супер методы при переопределении методов, поэтому он будет вести себя правильно!