我写了一个演示来测试按钮,但我有一个小问题。 keyDown 和 keyUp 不起作用。像这样的代码。
我创建了一个按钮加入阶段,并在按钮上添加了ClickListener,监听器可以工作,但是无法触发ClickListener中的keyDown和keyUp方法,为什么以及如何触发它
按钮屏幕
public class ButtonScreen implements Screen {
public OrthographicCamera camera;
public Stage stage;
public ButtonScreen() {
camera = new OrthographicCamera();
Viewport viewport = new ScreenViewport(camera);
stage = new Stage(viewport);
//add stage to Inputprocessor
Gdx.input.setInputProcessor(stage);
//make button
Button button = new Button(new TextureRegionDrawable(ImgConsUtil.timeFileAtlas.findRegion(CardConstant.DO)),
new TextureRegionDrawable(ImgConsUtil.timeFileAtlas.findRegion(CardConstant.ONE_TIME)));
button.setPosition(200,200);
button.addListener(new MyButtonClickListener());
//add button to stage
stage.addActor(button);
}
@Override
public void render(float delta) {
camera.update();
PreparClass.batch.setProjectionMatrix(camera.combined);
stage.act();
stage.draw();
}
}
我的按钮点击监听器
public class MyButtonClickListener extends ClickListener{
@Override
public boolean keyDown (InputEvent event, int keycode) {
System.out.println("keyDown");
return true;
}
@Override
public boolean keyUp (InputEvent event, int keycode) {
System.out.println("keyUp");
return true;
}
@Override
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("touchdown");
return false;
}
public void clicked(InputEvent inputEvent, float x,float y){
System.out.println("clicked");
}
我按下按键,但不会运行到 keyup 或 keydown
我找到原因了,按钮没有获得焦点,不响应任何事件。仅当单击鼠标时它才会获得焦点。也就是说,Button只响应点击事件。所以,如果你想获取键盘事件,只需为“Stage”设置一个“Listener”即可。