Input LibGDX-多个参与者接收关键事件

Input LibGDX-多个参与者接收关键事件,input,libgdx,Input,Libgdx,我有一个以上的本地合作游戏演员需要接收关键事件,例如玩家1使用箭头键,玩家2使用WASD等。。。。如果我只是向舞台添加演员,他们不会通过InputListener接收关键事件,如果我这样做: stage.setKeyboardFocus(p1); stage.setKeyboardFocus(p2); 当然,只有玩家2接收关键事件。我怎样才能让两个或两个以上的参与者接收关键事件?解决了这个问题。与其将键盘焦点设置为单个参与者,不如将其设置为普通参与者,然后只向该参与者添加一个侦听器。例如: p

我有一个以上的本地合作游戏演员需要接收关键事件,例如玩家1使用箭头键,玩家2使用WASD等。。。。如果我只是向舞台添加演员,他们不会通过InputListener接收关键事件,如果我这样做:

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

当然,只有玩家2接收关键事件。我怎样才能让两个或两个以上的参与者接收关键事件?

解决了这个问题。与其将键盘焦点设置为单个参与者,不如将其设置为普通参与者,然后只向该参与者添加一个侦听器。例如:

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

我明白了。与其将键盘焦点设置为单个参与者,不如将其设置为普通参与者,然后只向该参与者添加一个侦听器。例如:

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

您可以使用组或表,这些组或表是可以包含其他参与者的参与者,并添加参与者

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

您可以使用组或表,这些组或表是可以包含其他参与者的参与者,并添加参与者

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);
Libgdx Stage扩展了InputAdapter,它允许您访问方法keyDownint keyCode和keyUpint keyCode。如果使用以下命令将后台设置为InputProcessor:Gdx.setInputProcessorstage;您可以在阶段中处理关键输入。 一些伪代码:

public boolean keyDown(int keyCode) {
    switch (keyCode) {
    case Input.Keys.A:
         player2.moveLeft();
    case Input.Keys.NUMPAD_4:
         player1.moveLeft();
    }
}
希望对您有所帮助。

Libgdx Stage扩展了InputAdapter,它使您能够访问keyDownint-keyCode和keyUpint-keyCode方法。如果使用以下命令将后台设置为InputProcessor:Gdx.setInputProcessorstage;您可以在阶段中处理关键输入。 一些伪代码:

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

希望能有帮助。

奇怪的是,没有人提到。根据你的情况试试看。

奇怪的是没有人提到。根据您的情况试试。

只是想让您知道:演员会自动添加到舞台内名为root的组中。Stage扩展了InputAdapter,因此您不必将侦听器添加到该组中,您可以直接访问该方法。只需让您知道:参与者会自动添加到Stage内名为root的组中。Stage扩展了InputAdapter,因此您不需要将侦听器添加到该组,您可以直接访问该方法。我不会直接将其设置为根组。按照我的建议,将你的舞台设置为inputListener。因此,您的阶段可以处理输入并将其提供给受影响的ActorI,而不会直接将其设置为根组。按照我的建议,将你的舞台设置为inputListener。因此,您的阶段可以处理输入,并将其提供给受影响的Actor。只有一个InputProcessor阶段。所以他不能以任何方式应用输入多路复用器。他只有一个输入处理器级。所以他不能以任何方式应用输入多路复用器。