gpt4 book ai didi

java - clickListener 未正确初始化

转载 作者:行者123 更新时间:2023-12-02 05:30:36 26 4
gpt4 key购买 nike

抱歉,我对 Java 和 LibGDX 很陌生,但是我遇到了问题。

我的 Pong 游戏中有两个按钮。如果score1或score2等于5,则游戏结束。这是通过使球和桨移出屏幕,然后初始化名为drawButtonRematch和drawButtonMenu的方法来完成的,该方法绘制两个按钮“REMATCH”和“MAIN MENU”。

我不知道为什么,但重赛按钮的 clickListener 仅在您玩游戏时有效(当 Score1 或 Score2 = 5 时无效)。

简单地说,当您玩游戏时(不是当分数 = 5 时),重赛按钮不存在,但 clickListener 存在。如果您单击该按钮所在的位置,则会重新比赛。因此,如果用户不小心点击该区域,他们就会重置游戏。

这是一个图像可视化:

/image/mMPgH.jpg

这是我的代码。这是导致问题的按钮。

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 的!感谢您的帮助。

最佳答案

当重新比赛按钮隐藏时,您只需将其触摸设置为禁用模式即可。

你可以这样做:

 public void hideRematchButton(){
rematchButton.setVisible(false);
rematchButton.setTouchable(Touchable.disabled);
}

public void showRematchButton(){
rematchButton.setVisible(true);
rematchButton.setTouchable(Touchable.enabled);
}

关于java - clickListener 未正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com