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