java - Actor 的输入监听器

标签 java libgdx scene2d

我遇到一个问题,当我按任意键时,Actor 中的 keyDown 事件永远不会触发。不过,touchDown(用于鼠标点击)可以工作。

Actor 代码:

public class MapActor extends Actor {
    private TiledMap map;
    private OrthogonalTiledMapRenderer renderer;
    private int directions = 0;
    private OrthographicCamera camera;

    public MapActor(String pathToMap, OrthographicCamera camera) {
        TmxMapLoader loader = new TmxMapLoader();
        map = loader.load(pathToMap);
        renderer = new OrthogonalTiledMapRenderer(map);
        this.camera = camera;

        this.setBounds(0, 0, 500, 500);
        this.addListener(new InputListener() {
            // a - 29, w - 51, d - 32, s - 47
            @Override
            public boolean keyDown(InputEvent event, int keycode) {
                System.out.println("Test");
                return true;
            }


            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                Gdx.app.log("Touch", "touch down");
                return true;
            }
        });
    }

    @Override
    public void act(float delta) {
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        super.draw(batch, parentAlpha);
        batch.end();
        renderer.setView(camera);
        renderer.render();
        batch.begin();
    }

    public void dispose()   {
        renderer.dispose();
        map.dispose();
    }
}

以下是我将 Actor 添加到舞台的方法:

@Override
public void create () {
    stage = new Stage(new ScreenViewport());
    Gdx.input.setInputProcessor(stage);

    MapActor mapActor = new MapActor("maps/testmap.tmx", (OrthographicCamera) stage.getCamera());
    stage.addActor(mapActor);

}

欢迎任何建议。

最佳答案

只有拥有键盘焦点的 actor 才会收到键盘事件。

要设置哪个 Actor 拥有键盘焦点,您可以使用以下命令...

    `Stage.setKeyboardFocus(Actor actor);`

从此以后,键盘事件将被传递给指定的actor。

关于java - Actor 的输入监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490832/

相关文章:

java - 我的 FitViewport 不适用于所有屏幕

java - 滚动 Pane 图像表

java - 如何将 Throw 与多个 if/else 条件一起使用?

java - 这个MySQL可以在JDBC中运行吗?

gradle - 如何使用 Gradle 构建 BaseGameUtils Android 项目?

android - Libgdx Android 设置屏幕分辨率

java - 一段时间后应用程序崩溃并出现 TokenRefresher 异常

java - 添加代码后,视频无法启动并且 JPEG 不再显示

java - 如何将 libGDX GWT 游戏转换为 1.9.5 版?

java - LibGDX 第一次加载 scene2D 小部件非常慢,需要建议