2014-08-31 60 views
0

对不起,我对Java和LibGDX很新,但是我遇到了问题。clickListener没有正确初始化

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

我不确定为什么,但复位按钮的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); 


    } 

对不起,如果这是你在你的生活中见过的最糟糕的代码,我才开始使用Java上8月1日!谢谢你的帮助。

回答

2

您应该简单地将复位按钮的触摸设置为禁用模式,当我隐藏。

你可以这样说:

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

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