Libgdx 使用 ClickListener 记录错误的整数
Libgdx logging wrong integer with ClickListener
我的 libgdx ClickListener 有问题。
当我初始化我的按钮并在 forloop 中为每个按钮添加一个新的 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;
}
}
我希望有人知道如何解决这个问题,谢谢 reading/helping!
它们都在查看您在 for 循环中初始化的同一个 i
。像这样为每个听众制作一份唯一的副本:
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
那样在其外部,因此会为每个侦听器创建一个独特的版本。
我的 libgdx ClickListener 有问题。
当我初始化我的按钮并在 forloop 中为每个按钮添加一个新的 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;
}
}
我希望有人知道如何解决这个问题,谢谢 reading/helping!
它们都在查看您在 for 循环中初始化的同一个 i
。像这样为每个听众制作一份唯一的副本:
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
那样在其外部,因此会为每个侦听器创建一个独特的版本。