2016-04-24 9 views
0

Android Studio-libgdxが2dゲームを作っています。 私はMenuStateを作成し、メインは、私がこのAndroidStudio libgdx ChangeListenerが動作しない

@Override 
    public void render(float delta) { 
    Gdx.gl.glClearColor(0, 0, 0.2f, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    camera.update(); 
    myGame.batch.setProjectionMatrix(camera.combined); 
    batch = new SpriteBatch(); 
    skin = new Skin(Gdx.files.internal("data/uiskin.json")); 
    stage = new Stage(); 

    final TextButton button = new TextButton("Click me", skin, "default"); 

    button.setWidth(400f); 
    button.setHeight(100f); 
    button.setPosition(Gdx.graphics.getWidth()/2 - 100f, Gdx.graphics.getHeight()/2 - 10f); 

    button.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      Gdx.gl.glClearColor(1, 0, 0, 1); 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     } 
    }); 
    stage.addActor(button); 

    Gdx.input.setInputProcessor(stage); 

    myGame.batch.begin(); 
    stage.draw(); 
    myGame.batch.end(); 
} 

作らrenderメソッドでは、私は、メニューを作成する方法についていくつかのチュートリアルをチェックしているし、それは私がここでテストしてるものをほとんどです。 しかし、私は、アプリを実行すると、ボタンが表示され、何も私はそれをクリックして起こる。 ClickListenerでテストしようとしましたが、まだ動作しません。何か案は?あるいは私はそれを間違っているのか、それとも別の方法で行うべきですか? 私はlibgdxで新しいです。前もって感謝します。

答えて

0

レンダリング方法でステージ、スキン、バッチの新しいインスタンスを作成していますか?

@Override 
     public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0.2f, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     camera.update(); 
     myGame.batch.setProjectionMatrix(camera.combined); 

     myGame.batch.begin(); 
     stage.draw(); 
     myGame.batch.end(); 
} 

そしてコンストラクタでは:

batch = new SpriteBatch(); 
    skin = new Skin(Gdx.files.internal("data/uiskin.json")); 
    stage = new Stage(); 

    final TextButton button = new TextButton("Click me", skin, "default"); 

    button.setWidth(400f); 
    button.setHeight(100f); 
    button.setPosition(Gdx.graphics.getWidth()/2 - 100f, Gdx.graphics.getHeight()/2 - 10f); 

    button.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      Gdx.gl.glClearColor(1, 0, 0, 1); 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     } 
    }); 
    stage.addActor(button); 

    Gdx.input.setInputProcessor(stage); 
+0

そうですねより次のようになります。レンダリング)

を、離れてあなたのrenderメソッドからそれらを移動します。それはうまくいった!だから、レンダリングのmetodは何度も何度も実行されますか?本当にありがとう! –

+0

はい、その60 "のように呼ばれる? 1秒あたりの時間数、ハードウェアによって異なります。したがって、基本的には、レンダリングメソッド内で「新しい」を使用しないで、アプリをより速く安定した状態に保つようにしてください。 :) – Reiska