clickListener未正确初始化

时间:2014-08-31 02:52:44

标签: java libgdx scene2d clicklistener

对不起,我是Java和LibGDX的新手,但是我遇到了问题。

我在Pong游戏中有两个按钮。如果得分1或得分2等于5,则游戏结束。这是通过使球和拨片移出屏幕来完成的,然后初始化一个名为drawButtonRematch和drawButtonMenu的方法,绘制两个按钮" REMATCH"和"主菜单"。

我不确定原因,但重新匹配按钮的clickListener仅在您玩游戏时有效(而不是在score1或score2 = 5时)。

简单来说,当您正在玩游戏时(而不是在得分= 5时),重新匹配按钮不存在但是clickListener是。如果单击按钮所在的位置,则会使游戏重新匹配。因此,如果用户不小心点击该区域,他们将重置游戏。

这是一个图像可视化:

http://imgur.com/a/n8F4l

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

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

1 个答案:

答案 0 :(得分:2)

当我隐藏时,您应该将重新匹配按钮的触摸设置为禁用模式。

你可以这样做:

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

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