我尝试使用TextField
来获取一些用户输入:
public void render() {
Gdx.gl.glClear(GL11.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0, 0, 0, 0);
batch.begin();
batch.end();
stage = new Stage();
Gdx.input.setInputProcessor(stage);
Skin skin = new Skin(Gdx.files.internal("assets/uiskin.json"));
TextButton btnLogin = new TextButton("Click", skin);
btnLogin.setPosition(300, 300);
btnLogin.setSize(300, 60);
btnLogin.addListener(new ClickListener() {
public boolean touchDown(InputEvent e, float x, float y, int point, int button) {
System.out.println(txfUsername.getText());
return false;
}
});
txfUsername = new TextField("", skin);
txfUsername.setPosition(300, 250);
txfUsername.setSize(300, 40);
stage.addActor(txfUsername);
stage.addActor(btnLogin);
stage.act();
stage.draw();
}
我得到的只是一片空白。用户无法以任何方式与其进行交互。
我按照this video中的说明操作 如何使文本域可编辑?
答案 0 :(得分:3)
您在txfUsername = new TextField ("", skin);
方法中使用render
。这会在每个渲染中从头开始创建一个新的TextField。
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
// do other rendering ...
batch.end();
Gdx.app.log("MyTextField", txfUsername.getText());
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
在你的班级变量中:
private TextButton btnLogin;
TextField txfUsername;
使用您的方法show
或create
(不是render
):
@Override
public void show() {
btnLogin = new TextButton("Click", skin);
btnLogin.setPosition(300, 300);
btnLogin.setSize(300, 60);
btnLogin.addListener(new ClickListener() {
public boolean touchDown(InputEvent e, float x, float y, int point, int button) {
System.out.println(txfUsername.getText());
return false;
}
});
txfUsername = new TextField("", skin);
txfUsername.setPosition(300, 250);
txfUsername.setSize(300, 40);
stage.addActor(txfUsername);
stage.addActor(btnLogin);
}
使用为字段编写的txfUsername.getText();
编辑:我不知道你是如何使用GL11的,如果GL10,我能理解你的故障,如果你在GL10中出错,你应该更新libgdx,GL10是一个接口,我觉得libgdx的最新版本没有已经带来了