2016-11-01 1 views
-1

У меня есть ImageButton в моей игре LibGDX с незначительной ошибкой, которая может раздражать пользователя. Если бы я нажал на кнопку, но решил не хотеть щелкнуть ее, я бы оттащил палец.
Однако, даже если мой палец больше не находится поверх ImageButton после его перетаскивания, метод touchUp() по-прежнему вызывается.ImageButton touch event по-прежнему называется после перетаскивания пальца

Как остановить событие touchUp?

Я не знаю, может ли каким-то образом получить границы этого ImageButton (как это будет происходить) и увидеть, соответствует ли местоположение touchUp, может работать. Я пробовал искать его, но до сих пор мне не удалось найти ничего, потому что моя проблема очень специфична.

Это, как я инициализируется моя кнопка:

retryButton = new ImageButton(getDrawable(new Texture("RetryButtonUp.jpg")), getDrawable(new Texture("RetryButtonDown.jpg"))); 


retryButton.addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      return true; 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      if(touchable) { 
       game.setScreen(new PlayScreen(game, difficulty)); 
       dispose(); 
      } 
     } 
    }); 

ответ

1

Вы должны использовать ClickListener вместо InputListener, и вместо переопределения метода touchUp, переопределить метод clicked.

+0

Благодаря ... у вас есть какие-либо идеи, почему мой вопрос получил downvotes? – Eames

+0

Кнопка уже имеет встроенный ClickListener - имеет смысл добавить ChangeListener, а не другой ClickListener, чтобы избежать избыточной обработки ввода. Не знаю, почему ваш вопрос был приостановлен - выглядит хорошо. – Tenfour04

0

Отказавшись от ответа grimrader22, я также рекомендую использовать ClickListener для обработки событий касания, но вы все равно получите ту же проблему, что и выключение кода в событии touchUp, даже если вы перетащите свой палец за пределы ImageButton , поэтому метод clicked должен работать нормально.

Но, если вы хотите использовать touchUp и touchDown методы, здесь я идти: х и у значения в touchUp и touchDown представляют локальные координаты сенсорного события на ImageButton. Таким образом, простое решение, чтобы убедиться в й и у события в рамках метода touchUp находится в локальных координатах IMAGEBUTTON в ...

@Override 
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
     boolean inX = x >= 0 && x < getWidth(); 
     boolean inY = y >= 0 && y < getHeight(); 
     if(inX && inY && touchable) { 
      game.setScreen(new PlayScreen(game, difficulty)); 
      dispose(); 
     } 
    }