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 按钮在触摸时没有响应的主要内容,如果未能解决你的问题,请参考以下文章