LibGDX按钮在触摸时没有响应

时间:2018-01-25 13:59:20

标签: java android-studio libgdx

我的第一个问题是文本字段没有显示,第二个问题是按钮没有响应。我的想法是当图像' 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;
}

2 个答案:

答案 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()中为按钮创建图像,然后将按钮添加到舞台上。那你只需要绘制舞台。