LibGDX - 接收关键事件的多个角色

时间:2014-02-05 18:50:14

标签: input libgdx

我有多个需要接收关键事件的演员(对于本地合作游戏)(例如,玩家1使用箭头键,玩家2使用WASD等......)。如果我只是将Actors添加到舞台,它们不会通过InputListener接收键事件,如果我这样做:

stage.setKeyboardFocus(p1);
stage.setKeyboardFocus(p2);

当然,只有玩家2才会收到关键事件。如何让两个(​​或更多)演员接收关键事件?

4 个答案:

答案 0 :(得分:3)

您可以使用可以包含其他actor的actor或Table,并添加actor

Gdx.setInputProcessor(stage);
group = new Group();
group.addActor(actor1);
group.addActor(actor2);

group.addListener(new InputListener(){
   @Override
   public boolean keyDown(InputEvent event, int keycode){
    if (keycode == Keys.A){
       update(actor1)
    }
    if (keycode == Keys.LEFT{
       update(actor2)
    }
    return true;
    });

stage.addActor(group);
stage.setKeyboardFocus(group);

答案 1 :(得分:1)

Libgdx Stage扩展了InputAdapter,可让您访问方法keyDown(int keyCode)keyUp(int keyCode)。如果您使用StageInputProcessor设置为Gdx.setInputProcessor(stage);,则可以处理Stage中的关键输入。 一些伪代码:

public boolean keyDown(int keyCode) {
    switch (keyCode) {
    case Input.Keys.A:
         player2.moveLeft();
    case Input.Keys.NUMPAD_4:
         player1.moveLeft();
    }
}

希望它有所帮助。

答案 2 :(得分:1)

很奇怪没有人提到InputMultiplexer。试试你的情况。

答案 3 :(得分:-1)

想出来。而不是将键盘焦点设置为单个Actors,将其设置为公共actor,然后只是向该actor添加一个侦听器。 E.G:

public class Scene extends Stage
{
    public Scene()
    {
        setKeyboardFocus(getRoot()); // getRoot() returns the parent actor group
        addActor(new Player(1));
        addActor(new Player(2));
    }
}

public class Player extends Actor
{
    public Player(Stage stage)
    {
        stage.getRoot().addListener(inputListener);
    }
}