clickListener没有正确初始化
问题描述:
对不起,我对Java和LibGDX很新,但是我遇到了问题。clickListener没有正确初始化
我在我的Pong游戏中有两个按钮。如果score1或score2等于5,则游戏结束。这是通过使球和桨移出屏幕来完成的,然后初始化称为drawButtonRematch和drawButtonMenu的方法,其绘制两个按钮“REMATCH”和“MAIN MENU”。
我不确定为什么,但复位按钮的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);
}
对不起,如果这是你在你的生活中见过的最糟糕的代码,我才开始使用Java上8月1日!谢谢你的帮助。
答
您应该简单地将复位按钮的触摸设置为禁用模式,当我隐藏。
你可以这样说:
public void hideRematchButton(){
rematchButton.setVisible(false);
rematchButton.setTouchable(Touchable.disabled);
}
public void showRematchButton(){
rematchButton.setVisible(true);
rematchButton.setTouchable(Touchable.enabled);
}