如何防止actor被触摸时屏幕上的clickevent? (LIBGDX)

时间:2019-01-03 16:02:52

标签: libgdx

我有一个:

  • 实现InputProcessor的屏幕
  • 在屏幕上创建的舞台。
  • 添加到舞台上的演员
  • Actor具有一个带有touchUp方法的InputListener,当触摸actor时会调用它。
  • 单击actor时,将调用actor输入侦听器的touchUp方法,还调用InputProcessor中的touchUp。

问题: 如何防止从屏幕调用touchup方法?我的目标只是处理演员的活动。我只想对演员的触摸做出反应,而不是对屏幕做出反应。

2 个答案:

答案 0 :(得分:0)

以下是帮助您更好地理解我的答案的参考:

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返回true,其他监听器是否会收到touchDown调用(考虑到文档,我认为他们不会) 。那是您必须自己测试的东西。


现在,如果您确实需要取消“修饰”事件,请执行以下操作:

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

您可以尝试取消活动。由于touchUp中的InputListener方法传递了一个InputEvent对象,因此您可以尝试使用inputEvent.cancel()

取消它

答案 1 :(得分:0)

如果您将捕获诸如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进行了更多描述:Screen responds when button is clicked