我正在使用LibGDX开发Android游戏,并希望实现两个TextField
来登录服务器。
据我所知,我需要使用Stage
将TextField
添加为Actor
,如下所示:
this.stage = new Stage();
TextField txtf = new TextField("", mSkin);
//...
stage.addActor(txtf);
// And then set the stage as InputProcessor
Gdx.input.setInputProcessor(this.stage);
但我已经有一个自定义InputHandler
来实现InputProcessor
。我真的不知道如何使用TextField
处理InputHandler
。
我在TextField
中创建了InputHandler
,就像这样:
public class InputHandler implements InputProcessor {
public InputHandler(float ratioWidth, float ratioHeight, GameWorld world) {
this.world = world;
this.player = world.getPlayer();
this.ratioWidth = ratioWidth;
this.ratioHeight = ratioHeight;
//...
this.usernameTextField = new TextField("", AssetLoader.defaultSkin);
this.usernameTextField.setPosition(24,73);
this.usernameTextField.setSize(88, 14);
this.passwordTextField = new TextField("", AssetLoader.defaultSkin);
this.passwordTextField.setPosition(24, 102);
this.passwordTextField.setSize(88, 14);
this.actors.add(this.usernameTextField);
this.actors.add(this.passwordTextField);
}
然后我的InputHandler
中有一个方法可以获得TextField
的{{1}}:
GameRenderer
这是我的public ArrayList<Actor> getActors() { return this.actors; }
:
GameRenderer
public class GameRenderer {
public GameRenderer(GameWorld world) {
this.world = world;
//...
}
//...
private void drawLogUI() {
for(Actor a : ((InputHandler) Gdx.input.getInputProcessor()).getActors()){
a.draw(batcher, 1);
}
//...
}
public void render(float delta) {
// Initialisation
Gdx.gl.glClearColor(32/255.0f, 72/255.0f, 132/255.0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batcher.begin();
batcher.enableBlending();
//...
drawLogUI();
//...
batcher.end();
}
//...
}
正在渲染但我无法对它们做任何事情,键盘没有显示等等。有人可以解释我如何在我的项目中使用它们吗?
答案 0 :(得分:2)
您知道需要使用Stage
和TextField
来满足您的要求,您创建TextField
但不添加到舞台,因此您不使用scene2d(舞台,演员) ,textfield ..)
您关注的教程,没有阶段,所以他正在使用InputProcessor
来满足他的要求。
TextField usernameTextField = new TextField("", AssetLoader.defaultSkin);
usernameTextField.setPosition(24,73);
usernameTextField.setSize(88, 14);
stage.add(usernameTextField); // <-- Actor now on stage
Gdx.input.setInputProcessor(stage);
内部render()
方法调用
stage.draw();
stage.act();