gpt4 book ai didi

java - 单击按钮时屏幕响应

转载 作者:行者123 更新时间:2023-12-02 10:47:54 25 4
gpt4 key购买 nike

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

Gdx.input.setInputProcessor(stage);

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

感谢您的建议!

最佳答案

您可以使用InputMultiplexer

首先,InputMultiplexer 是如何工作的。
InputMultiplexer中,您可以执行许多InputProcessor,并且InputProcessor具有返回 boolean 值的方法。
这个 boolean 值表示事件是否被处理。
因此,如果该方法返回 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();
}
}

现在我们将使用 ChangeListener 创建 TextButton
问题是,我们如何才能说事件已被处理?
ChangeListener::changed(ChangeEvent event, Actor actor) 不返回 boolean 值。

当我们查看Stage类时,我们可以找到touchDown方法,并且该方法返回:

boolean handled = event.isHandled();
return handled;

eventEvent 的一种类型,ChangeEvent 扩展了 Event
在我们的 changed(ChangeEvent event, Actor actor) 方法中,我们有一个 ChangeEvent。所以我们所要做的就是设置这个事件被处理。
Event中有一个方法:

public voidhandle(){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);

最后,我们创建了 InputMultiplexer。重要的是,阶段出现在我们的 TestScreenInput 之前,因为 TestScreenInput 会将 touchDown 标记为已处理,而 stage 永远不会将收到它们。

InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(stage);
multiplexer.addProcessor(new TestScreenInput());
Gdx.input.setInputProcessor(multiplexer);

关于java - 单击按钮时屏幕响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com