2017-05-24 15 views
0

これには答えが見つからないようです。特定のクリック数の後にスタートボタンがフリーズする(3)のはなぜですか?これは最初の3回のクリックに対して機能し、その後動作を停止することを決定します。私はまだ画面が応答しているのを見ることができます(クリックするとボタンが赤くなります)が、テキストは変わりません。これは、クリックリスナーが応答を停止したようなものです。数回クリックするとボタンが反応しませんlib-gdx

public class MainMenu implements Screen{ 

    private Game game; 
    private Stage stage; 

    private TextButton Start_btn; 
    private TextButton LocalWifi_btn; 
    private TextButton Internet_btn; 

    private TextButton Settings_btn; 


    private boolean Start_clicked = false; 
    private boolean LocalWifi_clicked = false; 
    private boolean Internet_clicked = false; 
    private boolean Settings_clicked = false; 


    public MainMenu(Game g){ 
     game = g; //The Wasteland 

     stage = new Stage(new ExtendViewport(Gdx.graphics.getWidth(), 
       Gdx.graphics.getHeight())); //create a new stage with viewport to draw 2d stuff on 

     Gdx.input.setInputProcessor(stage); //all input set to stage 


     Skin skin = new Skin(Gdx.files.internal("gui/uiskin.json"), new TextureAtlas(Gdx.files.internal("gui/uiskin.atlas"))); //need this before you can make a gui 

     Start_btn = new TextButton("" + Start_clicked, skin); 

     Start_btn.setPosition(500, 500); 
     Start_btn.setSize(200, 200); 
     Start_btn.getLabel().setFontScale(10, 10); //change text size 

     Start_btn.addListener(new ClickListener(){ 
      @Override 
      public void touchUp(InputEvent e, float x, float y, int point, int button){ 
       onStartClicked(); 
      } 
     }); 
     stage.addActor(Start_btn); 

    } 

    private void onStartClicked(){ 

     if(!Start_clicked){ 
      Start_clicked = true; 
      Start_btn.setText("" + Start_clicked); 
      Gdx.app.log("Button", "" + Start_clicked); 

     } 
     else{ 
      Start_clicked = false; 
      Start_btn.setText("" + Start_clicked); 
      Gdx.app.log("Button", "" + Start_clicked); 

     } 

    } 

    @Override 
    public void render(float delta) { 

     //this has to be before anything or else it will be drawn on top of everything else 
     Gdx.gl.glClearColor(0, 0, 0, 1); //set background color 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //clears the screen 

     stage.act(delta); //send ammount of time since last render call, tells it to keep a steady fps 

     stage.draw(); 

    } 

    @Override 
    public void resize(int width, int height) { 
     // use true here to center the camera 
     // that's what you probably want in case of a UI 
     stage.getViewport().update(width, height, true); 


    } 

} 

私は間違っていますか?!?!?!

答えて

0

touchUp()を無効にしないでください。super.touchUp()は、ClickListenerの機能を妨害するためです。しかし、それはあなたがやり直したいものではありません。 clicked()を上書きする必要があります。そのため、ボタンの上にクリックしたままにした場合にのみトリガーが発生します。または、ChangeListenerを使用することをお勧めします。ボタンには既に、ボタンがクリックされたときに変更イベントを発生させるClickListenerが組み込まれています。 ChangeListenerを使用するだけで、別のClickListenerを追加することは冗長です。

関連する問題