1 回答

TA貢獻2037條經(jīng)驗 獲得超6個贊
您可以使用InputMultiplexer.
首先是如何InputMultiplexer工作。
在InputMultiplexer你可以做很多InputProcessors 和InputProcessor返回布爾值的方法。
這個布爾值表示事件是否被處理。
因此,如果該方法返回 false,InputMultiplexer則將事件交給下一個InputProcessor.
如果該方法返回 true,則事件已被處理并且該事件不會轉(zhuǎn)到下一個InputProcessor.
現(xiàn)在我們InputProcessor在這種情況下為我們的屏幕制作一個TestScreenInput:
public class TestScreenInput implements InputProcessor {
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
System.out.println("Touch down");
character.jump();
return true;
}
@Override
... //all other methods from InputProcessor
}
該touchDown方法返回 true,因此下一個 InputProcessor 將不會收到該touchDown事件
在我們的屏幕類(TestScreen)中,我們創(chuàng)建了我們的Stage:
public class TestScreen implements Screen {
private Stage stage;
@Override
public void show() {
stage = new Stage();
}
}
現(xiàn)在我們將創(chuàng)建我們TextButton的ChangeListener.
問題是,我們怎么能說事件被處理了呢?
將ChangeListener::changed(ChangeEvent event, Actor actor)不返回一個布爾值。
當我們查看Stage類時,我們可以找到該touchDown方法并且該方法返回:
boolean handled = event.isHandled();
return handled;
event是一個 Type ofEvent和ChangeEventextendsEvent
在我們的changed(ChangeEvent event, Actor actor)方法中,我們有一個ChangeEvent. 所以我們所要做的就是設置這個事件處理。
在Event有一種方法:
public void handle () { handled = true;}
現(xiàn)在我們知道了創(chuàng)建我們的 Button 的一切:
TextButton button = new TextButton("Click", skin);
button.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
System.out.println("Click Button");
event.handle(); //set the event handled = true
}
});
stage.addActor(button);
最后,我們創(chuàng)建我們的InputMultiplexer. 重要的是階段在我們之前,TestScreenInput因為TestScreenInput將標記touchDown為已處理并且stage永遠不會接收它們。
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(stage);
multiplexer.addProcessor(new TestScreenInput());
Gdx.input.setInputProcessor(multiplexer);
添加回答
舉報