单击按钮时屏幕响应

时间:2018-09-19 19:10:07

标签: java libgdx

基本上,我的屏幕上有一个字符和一个按钮。当我触摸屏幕时,角色会跳跃(使用Gdx.input.justTouched实现)。单击该按钮时会打开PauseMenu(按钮是舞台的演员,并且单击是使用button.addListener(new ChangeListener(){....})实现的。我的InputProcessor设置在舞台上

HAVING COUNT(*) = 1

问题是当单击按钮时,我的角色跳了起来(但他不应该跳),并且暂停菜单打开了。我正在通过InputMultiplexer搜索,但是没有用(或者我使用了错误的方式)。

谢谢您的建议!

1 个答案:

答案 0 :(得分:1)

您可以使用InputMultiplexer

首先InputMultiplexer的工作方式。
InputProcessor中,您可以执行许多InputProcessor,而InputMultiplexer具有返回布尔值的方法。
这个布尔值表示事件是否被处理。
因此,如果该方法返回false,则InputProcessor将事件传递给下一个InputProcessor
如果该方法返回true,则说明事件已处理,事件不会转到下一个InputProcessor

现在在这种情况下,我们为屏幕制作一个TestScreenInput public class TestScreenInput implements InputProcessor { @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { System.out.println("Touch down"); character.jump(); return true; } @Override ... //all other methods from InputProcessor }

touchDown

touchDown方法返回true,因此下一个InputProcessor不会成为Stage事件

在屏幕类(TestScreen)中,我们创建public class TestScreen implements Screen { private Stage stage; @Override public void show() { stage = new Stage(); } }

TextButton

现在,我们将使用ChangeListener创建ChangeListener::changed(ChangeEvent event, Actor actor)
问题是,如何说事件已得到处理?
Stage不返回布尔值。

当我们查看touchDown类时,我们可以找到boolean handled = event.isHandled(); return handled; 方法,该方法返回:

event

EventChangeEvent的类型,并且Event扩展了changed(ChangeEvent event, Actor actor)
在我们的ChangeEvent方法中,我们有一个Event。因此,我们要做的就是设置此事件的处理方式。
public void handle () { handled = true;}中,有一种方法:

TextButton button = new TextButton("Click", skin); button.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { System.out.println("Click Button"); event.handle(); //set the event handled = true } }); stage.addActor(button);

现在我们都知道创建Button了:

InputMultiplexer

最后,我们创建TestScreenInput。重要的是该阶段早于我们的TestScreenInput,因为touchDown会将stage标记为已处理,而InputMultiplexer multiplexer = new InputMultiplexer(); multiplexer.addProcessor(stage); multiplexer.addProcessor(new TestScreenInput()); Gdx.input.setInputProcessor(multiplexer); 永远不会收到它们。

{{1}}