2014-12-31 5 views
1

Я разрабатываю приложение для Android, но я застрял в создании слушателей для своих кнопок. Я уже прочитал множество статей и провел тестирование уже несколько часов, но это просто не сработает. Мне понравилось в этом примере: https://gist.github.com/mattdesl/5461944, и у меня даже нет ошибок в моем коде, но моя кнопка вообще не реагирует.Добавление ClickListener в TextButton LibGDX

Вот как я пытался (или, по крайней мере, один из нескольких попыток):

...public MainMenuScreen(final Stapler gam) { 
    game = gam; 

    stage = new Stage(); 
    table = new Table(); 
    table.setFillParent(true); 
    stage.addActor(table); 
    Gdx.input.setInputProcessor(stage); 

    font = new BitmapFont(Gdx.files.internal("fonts/Blox.fnt")); 
    bodoque = new BitmapFont(Gdx.files.internal("fonts/bodoque.fnt")); 

    shapeRenderer = new ShapeRenderer(); 

    // Add widgets to the table here. 

    TextureRegion upRegion = new TextureRegion(new Texture(
      Gdx.files.internal("boxLila.png"))); 
    TextureRegion downRegion = new TextureRegion(new Texture(
      Gdx.files.internal("boxGruen.png"))); 
    BitmapFont buttonFont = new BitmapFont(
      Gdx.files.internal("fonts/Blox.fnt"), false); 

    TextButtonStyle style = new TextButtonStyle(); 
    style.up = new TextureRegionDrawable(upRegion); 
    style.down = new TextureRegionDrawable(downRegion); 
    style.font = buttonFont; 

    play = new TextButton("Play", style); 
    table.add(play); 
    play.addListener(new ClickListener() { 
     public void clicked(InputEvent e, float x, float y) { 
      game.setScreen(game.gameScreen); 
      Gdx.app.log("Click", "performed"); // -> never happend 
     } 
    }); 

    // add the button with a fixed width 
    table.add(play).width(500); 
    // then move down a row 
    table.row(); 

} 

...

я решил или, по крайней мере, узнал, почему он не работает. Я создал экземпляр моего игрового мира с собственным InputProcessor, и когда я его не создаю, слушатель работает ... но теперь я должен выяснить, как использовать оба.

+0

Для использования обоих вы можете использовать InputMultiplexer вместо addProcessor всех своих процессоров, а затем установить его на Gdx.input.setInputProcessor (inputMultiplexer). – Hllink

ответ

3

Для этого вы можете добавить ChangeListener. Что-то вроде:

play.addListener(new ChangeListener() { 
     public void changed (ChangeEvent event, Actor actor) { 
      game.setScreen(game.gameScreen); 
     } 
    }); 

Это способ слушать щелчками кнопки, как это объясняется в libgdx scene2 wiki.