对不起,我是Java和LibGDX的新手,但是我遇到了问题。
我在Pong游戏中有两个按钮。如果得分1或得分2等于5,则游戏结束。这是通过使球和拨片移出屏幕来完成的,然后初始化一个名为drawButtonRematch和drawButtonMenu的方法,绘制两个按钮" REMATCH"和"主菜单"。
我不确定原因,但重新匹配按钮的clickListener仅在您玩游戏时有效(而不是在score1或score2 = 5时)。
简单来说,当您正在玩游戏时(而不是在得分= 5时),重新匹配按钮不存在但是clickListener是。如果单击按钮所在的位置,则会使游戏重新匹配。因此,如果用户不小心点击该区域,他们将重置游戏。
这是一个图像可视化:
这是我的代码。这是导致问题的按钮。
private void drawButtonRematch(float dt){
final Texture texture = new Texture(Gdx.files.internal("Assets/buttonRematch.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
Stage stage = new Stage();
stage.clear();
Image buttonRematch = new Image(texture);
buttonRematch.setX(640-(buttonRematch.getWidth()/2));
buttonRematch.setY(120);
buttonRematch.setWidth(300);
buttonRematch.setHeight(100);
Gdx.input.setInputProcessor(stage);
buttonRematch.addListener(new ClickListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
{
currentState = GameState.RESET;
return true;
}
});
这是主菜单按钮,它可以正常工作。字面意思与drawButtonRematch
相同 private void drawButtonMenu(float dt) {
final Texture texture = new Texture(Gdx.files.internal("Assets/buttonMenu.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
Stage stage = new Stage();
stage.clear();
// Menu
Image mainMenu = new Image(texture);
mainMenu.setX(640-(mainMenu.getWidth()/2));
mainMenu.setY(10);
mainMenu.setWidth(300);
mainMenu.setHeight(100);
Gdx.input.setInputProcessor(stage);
mainMenu.addListener(new ClickListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
{
currentState = GameState.MENU;
return true;
}
});
stage.addActor(mainMenu);
stage.draw();
}
然后最后在我的游戏逻辑中
if(score1 == 5){
drawWin(dt);
paddle1.move(-1000, -1000);
paddle2.move(-1000, -1000);
ball.setVelocity(0, 0);
ball.move(640, 50);
drawButtonRematch(dt);
drawButtonMenu(dt);
}
else if (score2 == 5){
drawWin2(dt);
paddle1.move(-1000, -1000);
paddle2.move(-1000, -1000);
ball.setVelocity(0, 0);
ball.move(640, 50);
drawButtonRematch(dt);
drawButtonMenu(dt);
}
对不起,如果这是你生命中看到的最糟糕的代码,我只在8月1日开始使用Java!谢谢你的帮助。
答案 0 :(得分:2)
当我隐藏时,您应该将重新匹配按钮的触摸设置为禁用模式。
你可以这样做:
public void hideRematchButton(){
rematchButton.setVisible(false);
rematchButton.setTouchable(Touchable.disabled);
}
public void showRematchButton(){
rematchButton.setVisible(true);
rematchButton.setTouchable(Touchable.enabled);
}