LibGDX 按钮在触摸时没有响应

Posted

技术标签:

【中文标题】LibGDX 按钮在触摸时没有响应【英文标题】:LibGDX Button not responding on touch 【发布时间】:2018-07-04 19:23:45 【问题描述】:

我的第一个问题是文本字段没有显示,第二个问题是按钮没有响应。我的想法是当触摸图像“vault1”时,文本字段应显示 5。

这是我想出的,我无法弄清楚我做错了什么。

(我只剪掉了必要的代码)

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;

【问题讨论】:

【参考方案1】:

很难判断您何时遗漏了代码,但您正在向输入处理器添加阶段:

 Gdx.input.setInputProcessor(stage);

舞台和添加到舞台的演员现在是唯一响应输入的东西。但是你从来没有在舞台上添加任何东西,也没有绘制舞台,你是在 drawSprite 方法中单独绘制你的精灵。

如果您改为将按钮添加到舞台,您只需调用 stage.draw():

public void render(float delta) 
    stage.draw();
    stage.act(delta);


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 = 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;
    );
    vaultInput.setPosition(x1, y1);
    vault1Button.setPosition(x2, y2);
    stage.addActor(vaultInput);
    stage.addActor(vault1Button);

调用stage.draw()时,添加到舞台的所有东西都会被绘制

【讨论】:

【参考方案2】:

在调用show() 时,vault1 字段的值仍然为空。因此,您将侦听器添加到的实际按钮大小为零,并且没有可绘制的内容。

此外,由于在游戏循环中不断调用render(),因此您正在创建新的精灵以在每一帧上绘制并在每一帧重新分配vault1 变量。

您需要为show() 中的按钮创建图像并将按钮添加到舞台。然后你只需要绘制舞台。

【讨论】:

以上是关于LibGDX 按钮在触摸时没有响应的主要内容,如果未能解决你的问题,请参考以下文章

动画移动 UIButton 在移动时不响应触摸/点击

UIScrollView下的UIButton没有响应触摸

带有按钮的 iOS 子视图不响应触摸。

UIImageView 的 UITextField 子视图没有响应触摸事件

UIButton 对快速点击没有响应

按钮没有响应第一次点击