将TextField与LibGDX一起使用

时间:2017-07-10 14:15:28

标签: java android libgdx

我正在使用LibGDX开发Android游戏,并希望实现两个TextField来登录服务器。

据我所知,我需要使用StageTextField添加为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(); } //... } 正在渲染但我无法对它们做任何事情,键盘没有显示等等。有人可以解释我如何在我的项目中使用它们吗?

1 个答案:

答案 0 :(得分:2)

您知道需要使用StageTextField来满足您的要求,您创建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();