使用Scene2d,我有一个在屏幕类中创建的InputMultiplexer。在我的屏幕类中,我创建了我的舞台并将其添加到InputMultiplexer。我还创建了一个处理UI的组。我将UI组添加到舞台上。然后我将组添加到多路复用器。
此时,多路复用器首先具有阶段,然后是第二个UI组。
我的舞台会覆盖触地得分方法,如下所示:
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
return false;
}
因为我的舞台在多路复用器中是第一个,所以它应首先处理输入,因为它返回false。然后它应该移动到我的UI组,该组在各种小部件上具有单击侦听器。但是,永远不会处理UI组。如果我在舞台上删除touchDown方法,它可以正常工作。
如何让UI组也处理输入?
我还在舞台类中添加了以下方法,看它是否会有所帮助,但事实并非如此。
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
答案 0 :(得分:2)
您正在覆盖舞台的事件处理功能。 检查Stage.touchDown的源代码。
如果您真的想要覆盖touchDown,请使用超级调用覆盖它,请注意这可能会导致奇怪的行为,因为在超级函数中,事件处理由Actors发生。
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
super.touchDown(screenX, screenY, pointer, button);
return false;
}