Java 参与者可以处理点击和按键事件吗?
我正试图让一个Java 参与者可以处理点击和按键事件吗?,java,libgdx,scene2d,Java,Libgdx,Scene2d,我正试图让一个演员同时处理点击和按键事件。我初始化了actor(在本例中是一个图像),如下所示: stage = new Stage(); texture = new Texture("badlogic.jpg"); Image image = new Image(texture); image.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, fl
演员同时处理点击和按键事件。我初始化了actor(在本例中是一个图像
),如下所示:
stage = new Stage();
texture = new Texture("badlogic.jpg");
Image image = new Image(texture);
image.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
Gdx.app.log("Image ClickListener", "clicked");
}
@Override
public boolean keyDown(InputEvent event, int keycode) {
Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode);
return true;
}
});
stage.addActor(image);
Gdx.input.setInputProcessor(stage);
当我单击图像
时,单击的事件按预期触发,即我看到相应的日志。但是,无论我按哪个键,key down事件都不会触发。我的问题是:为什么?演员不能同时处理点击和按键事件吗 默认情况下,您应该将键盘侦听器附加到舞台上,因为舞台上有键盘焦点,所以它应该类似于
stage.addListener(new InputListener()
{
@Override
public boolean keyDown(InputEvent event, int keycode)
{
Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode);
return true;
}
});
如果要将焦点更改为演员,可以使用方法setKeyboardFocus(演员-演员)。应该是这样的:
image.addListener(new ClickListener()
{
@Override
public void clicked(InputEvent event, float x, float y) {
Gdx.app.log("Image ClickListener", "clicked");
}
@Override
public boolean keyDown(InputEvent event, int keycode) {
Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode);
return true;
}
});
stage.setKeyboardFocus(image);
创建一个自定义类,该类扩展Actor
类并实现InputProcessor
接口
设置游戏时,请使用输入多路复用器
:
InputMultiplexer inputMulti = new InputMultiplexer(stage);
Gdx.input.setInputProcessor( inputMulti );
然后,在自定义类的构造函数中,您可以将正在创建的实例添加到多路复用器中,如下所示:
((InputMultiplexer)Gdx.input.getInputProcessor()).addProcessor(this);
然后,处理键输入功能变得更简单:不必使用addListener
方法并创建扩展ClickListener
等的匿名内部类,只需使用InputProcessor
方法即可,例如:
public boolean keyDown(int keycode)
{
if (keycode == Keys.SPACE)
{
// do something
}
return false;
}
这还避免了将键盘焦点设置在角色上的需要,如果您有多个角色需要处理键盘输入,则这可能无法很好地概括
然而,这种方法的一个警告是,任何配置为输入处理器的参与者现在都将处理所有输入事件,包括不与参与者重叠的触摸事件,并且这种行为可能是不希望的和/或令人困惑的