2015-07-30 2 views
2

У меня проблема с моим libgdx ClickListener.Libgdx регистрирует неправильное целое число с ClickListener

Когда я инициализирую свои кнопки и добавляю новый ClickListener для каждого из них в forloop, все кнопки записывают последний Int из прелюкса вместо числа, с которого я их создал.

Почему это происходит и как лучше всего решить эту проблему?

for(i = 0; i<data.getLevelData().size(); i++){ 
    buttonstyle = new ImageButtonStyle(); 
    buttonstyle.up = skin.getDrawable("pause-up"); 
    buttonstyle.down = skin.getDrawable("pause-down"); 
    buttonstyle.pressedOffsetX = 1; 
    buttonstyle.pressedOffsetY = -1; 

     button.add(new ImageButton(buttonstyle)); 

    button.get(i).addListener(new ClickListener(){ 
     @Override 
     public void clicked(InputEvent event, float x, float y){ 
      Gdx.app.log("test", "" + i); 
     } 
    }); 
    table.add(button.get(i)).expandX().pad(3).height(64).width(64); 

    rowcounter++; 

    if(rowcounter>5){ 
     table.row(); 
     rowcounter = 0; 
    } 
} 

Я надеюсь, что кто-то знает, как решить эту проблему thx для чтения/помощи!

ответ

0

Все они смотрят то же самое i, которое вы инициализировали в своем цикле for. Сделайте копию этого уникальным для каждого слушателя, как это:

final int iCopy = i; 
button.get(i).addListener(new ClickListener(){ 
    @Override 
    public void clicked(InputEvent event, float x, float y){ 
     Gdx.app.log("test", "" + iCopy); 
    } 
}); 

final классификатор обеспечивает значение не может меняться от того, что вы инициализирован как. Поскольку iCopy имеет область внутри цикла for, а не вне ее, как i, для каждого слушателя создается уникальная версия.

+0

Спасибо, что именно я искал! – Stefan