2017-08-08 27 views
0

我寫了下面的代碼:InputListener doesn't設置一個新的屏幕

public void show() { 
    skin = new Skin (Gdx.files.internal("PlayButton.json")); 
    button = new Button(skin); 
    button.setPosition(330,600); 
    button.setSize(240,240); 
    stage.addActor(button); 
} 

public void render() { 
    stage.draw(); 
    stage.getBatch().begin(); 
    button.addListener(new InputListener() { 
    public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
       game.setScreen(new GameScreen(game)); 
      } 
     }); 
     stage.getBatch().end(); 
} 

正如你所看到的,我想要顯示的GameScreen如果被點擊的按鈕。我可以點擊按鈕,但沒有反應。 如何設置新屏幕正確?

+0

不要在每一幀添加監聽器到您的按鈕。把它放在你的代碼的初始化部分,這是create()方法。 –

回答

1

在您的show()方法中添加收聽者Button而不是在render()方法中。

@Override 
public void show() { 
    skin = new Skin (Gdx.files.internal("PlayButton.json")); 
    button = new Button(skin); 
    button.setPosition(330,600); 
    button.setSize(240,240); 
    button.addListener(new ClickListener(){ 
     @Override 
     public void clicked(InputEvent event, float x, float y) { 
      game.setScreen(new GameScreen(game)); 
      super.clicked(event, x, y); 
     } 
    }); 

    stage.addActor(button); 
    Gdx.input.setInputProcessor(stage); 
} 

@Override 
public void render (float delta) { 

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    Gdx.gl.glClearColor(1,1,1,1); 

    stage.draw(); 
    stage.act(); 
} 
+0

謝謝你的幫助!然而,當我點擊按鈕時,沒有任何事情發生的時間段很短。這是什麼原因? – user8340536

+0

可能會因爲您在'GameScreen'類中使用某些資源而延遲。使用'AssetManager'並異步加載所有資產(紋理,字體,聲音......),並在需要時獲取資源表單assetmanager。 – Aryan