我的第一个问题是文本字段没有显示,第二个问题是按钮没有响应。我的想法是当图像' vault1'被触摸的文本字段应显示5。
这就是我想出来的,我无法弄清楚我做错了什么。
(我只删除了neseccary代码)
public void render(float delta) {
drawSprite("vault1", 600, 450);
}
public void show() {
Gdx.input.setInputProcessor(stage);
skin = new Skin(Gdx.files.internal("ui/menuSkin.json"), new TextureAtlas("ui/atlas.pack"));
vaultInput = new TextField("", skin);
vaultInput.setPosition(300, 250);
vaultInput.setSize(300, 40);
vaultInput.setText(text2);
vault1Button = new Image(vault1);
vault1Button.addListener(new ClickListener() {
public boolean touchDown(InputEvent e, float x, float y, int point, int button) {
System.out.println("133");
vaultInput.setText(score);
return false;
}});
}
private void drawSprite(String name, float x, float y) {
Sprite sprite = textureAtlas.createSprite(name);
sprite.setPosition(x, y);
sprite.draw(batch);
vault1 = sprite;
}
答案 0 :(得分:2)
很难说你何时遗漏了代码,但是你要将舞台添加到输入处理器:
{
"name": "Some project",
"type": "project",
"minimum-stability": "dev",
"prefer-stable": true,
"repositories": [{
"type": "path",
"url": "packages/*/*",
"symlink": true
}],
"require": {
"sample/package": "@dev"
}
}
舞台和演员添加到舞台现在是唯一响应输入的东西。但是你永远不会在舞台上添加任何内容,也不会画出舞台,你在drawSprite方法中单独绘制你的精灵。
如果你改为将你的按钮添加到舞台,你需要做的就是调用stage.draw():
Gdx.input.setInputProcessor(stage);
调用stage.draw()
时,将绘制添加到舞台中的所有内容答案 1 :(得分:0)
调用vault1
时,show()
字段的值仍为空。因此,您添加听众的实际按钮大小为零,无需绘制。
此外,由于在游戏循环中连续调用render()
,因此您要创建新的精灵以在每个帧上绘制并在每帧重新分配vault1
变量。
您需要在show()
中为按钮创建图像,然后将按钮添加到舞台上。那你只需要绘制舞台。