【问题标题】:InputListener for the ActorActor 的 InputListener
【发布时间】:2015-05-27 18:52:47
【问题描述】:

我有一个问题,当我按下任意键时,Actor 中永远不会触发 keyDown 事件。不过,touchDown(用于鼠标点击)有效。

演员代码:

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 添加到 Stage 的方法:

@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);

}

欢迎提出任何建议。

【问题讨论】:

  • stage.getViewport().update(width, height, true) 调整大小?和stage.act(deltaTime) 渲染?
  • 我有 stage.getviewport.update 调整大小。此外,如果我将 keys 侦听器添加到舞台而不是演员,它就会起作用。我目前没有act 的任何东西,对于演员来说它是空的。但我在主 render() 循环中调用 stage.act();

标签: java libgdx scene2d


【解决方案1】:

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

要设置哪个actor有键盘焦点,可以使用以下...

    `Stage.setKeyboardFocus(Actor actor);`

从那时起,键盘事件将被传递给指定的actor。

【讨论】:

  • 谢谢,当你提到它时,我发现它在 Scene2d wiki 中被提及。可惜我错过了。
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多