Как предотвратить появление кликов на экране при касании актера?(LIBGDX) - PullRequest
0 голосов
/ 03 января 2019

У меня есть:

  • Экран, реализующий InputProcessor
  • Сцена, созданная на экране.
  • Актер, добавленный к сцене
  • у актера есть InputListener с методом touchUp, который вызывается при прикосновении к актеру.
  • При нажатии на актера вызывается метод touchUp для объекта inputlistener, и вызывается также touchUp из InputProcessor.

Вопрос: Как я могу предотвратить вызов метода touchup с экрана?Моя цель только обработать событие от актера.Я бы хотел реагировать только на прикосновения актера, а не на экран.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Если вы перехватываете такие события, как touchUp, touchDown и т. Д., Вы должны сказать, что событие обрабатывается, иначе событие будет выполняться до следующего InputListener, пока один из слушателей не скажет, что событие обработано.

Чтобы установить событие для обработки, вы должны вызвать метод handle() для объекта события:

actor.addListener(new InputListener(){
    @Override
    public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
        event.handle();
    }
});

Здесь описывается немного больше с InputMultiplexer: Экран реагирует на нажатие кнопки

0 голосов
/ 04 января 2019

Вот ссылки, которые помогут вам лучше понять мой ответ:

https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/InputListener.html#touchDown-com.badlogic.gdx.scenes.scene2d.InputEvent-float-float-int-int-

Эта ссылка показывает один из методов в классе InputListener. В своем вопросе вы спрашивали о методе touchUp, который также связан с методом touchDown.

Метод touchDown возвращает логическое значение, тогда как touchUp является недействительным. Из-за этого вы не можете отменить событие «подправить». Однако вы можете «отменить» событие «приземления», вернув true. Я говорю «отмена», потому что на самом деле это не отменяет, а просто сообщает реализации, что вы сейчас обрабатываете события «касания» и «касания».

Использование метода touchDown, вероятно, является лучшим вариантом. Я полагаю, что вы все еще сможете использовать touchUp, но я не знаю, получат ли другие слушатели вызов touchUp, если touchDown вернул true (учитывая документацию, я не думаю, что они это сделают). Это то, что вы должны будете проверить сами.


Теперь, если вам действительно нужно отменить событие "touch up", сделайте следующее:

https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Event.html#cancel--

Вы можете попробовать отменить мероприятие. Поскольку метод touchUp в InputListener передает объект InputEvent, вы можете попробовать отменить его, используя inputEvent.cancel()

...