我有多个需要接收关键事件的演员(对于本地合作游戏)(例如,玩家1使用箭头键,玩家2使用WASD等......)。如果我只是将Actors添加到舞台,它们不会通过InputListener接收键事件,如果我这样做:
stage.setKeyboardFocus(p1);
stage.setKeyboardFocus(p2);
当然,只有玩家2才会收到关键事件。如何让两个(或更多)演员接收关键事件?
答案 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)
。如果您使用Stage
将InputProcessor
设置为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);
}
}