单击按钮时屏幕响应

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

Gdx.input.setInputProcessor(stage);

问题是当单击按钮时,我的角色会跳跃(但他不应该)并打开暂停菜单。我正在搜索 InputMultiplexer 但这没有用(或者我可能以错误的方式使用它)。

感谢您的任何建议!


蓝山帝景
浏览 143回答 1
1回答

阿晨1998

您可以使用InputMultiplexer.首先是如何InputMultiplexer工作。在InputMultiplexer你可以做很多InputProcessors 和InputProcessor返回布尔值的方法。这个布尔值表示事件是否被处理。因此,如果该方法返回 false,InputMultiplexer则将事件交给下一个InputProcessor.如果该方法返回 true,则事件已被处理并且该事件不会转到下一个InputProcessor.现在我们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方法返回 true,因此下一个 InputProcessor 将不会收到该touchDown事件在我们的屏幕类(TestScreen)中,我们创建了我们的Stage: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是一个 Type ofEvent和ChangeEventextendsEvent在我们的changed(ChangeEvent event, Actor actor)方法中,我们有一个ChangeEvent. 所以我们所要做的就是设置这个事件处理。在Event有一种方法:public void handle () { handled = true;}现在我们知道了创建我们的 Button 的一切: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);最后,我们创建我们的InputMultiplexer. 重要的是阶段在我们之前,TestScreenInput因为TestScreenInput将标记touchDown为已处理并且stage永远不会接收它们。InputMultiplexer multiplexer = new InputMultiplexer();multiplexer.addProcessor(stage);multiplexer.addProcessor(new TestScreenInput());Gdx.input.setInputProcessor(multiplexer);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java