2014-02-09 2 views
2

У меня есть следующая проблема: LibGDX. Когда вы переходите через Actor, вы получаете событие ввода от ClickListener и событие выхода, когда вы выходите из ограничивающей рамки Actor. Я сохраняю логический mouseOver, который говорит мне, если курсор находится над Actor с этими событиями. Но когда вы нажимаете на Actor и после отпускания мыши дается событие выхода. Таким образом, после отпускания щелчка мыши, как будто курсор больше не находится над Актером, пока он есть.событие выхода после touchup

Как я могу сохранить правильное состояние для логического mouseOver? Другими словами: как я могу узнать, находится ли мышь над моим Актером, когда произошло событие TouchUp, как в приведенном выше сценарии.

ответ

1

Вы можете переопределить TouchUp и установить логический MouseOver истину там.

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

Это не работает, потому что событие является выход вызываемый сразу после события касания. И я установил mouseOver в false на событие exit. – Vjeetje

0

Лучший хак я нашел до сих пор смотреть на указатель арг на выходе и введите переопределение и посмотреть, если мышь нажата. Тем не менее, я все еще ищу более чистое решение.

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); 
     } 
} 
0

Набор MouseOver ложь, только если актер toActor из выхода не актер вы добавили слушателя:

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; 
    } 
}); 
Смежные вопросы