尝试制作简单的打字游戏。我创建了一个由LibGDX scene2d TextButtons组成的键盘,并将它们放在3个scene2d表中(对于每一行键)并将它们包装在另一个表中。这是迄今为止的代码:
Gdx.input.setInputProcessor(stage);
Table keyboard = new Table();
Table keysTop = new Table();
Table keysMid = new Table();
Table keysBot = new Table();
final char ascii[] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L',
'Z', 'X', 'C', 'V', 'B', 'N', 'M'};
// create all keys in order of the ascii[] table above
for (int index = 0; index < ascii.length; index++) {
keys[index] = new TextButton("", skin);
String letter = Character.toString(ascii[index]);
keys[index].setText(letter);
keys[index].setSkin(skin);
// and put them in correct rows
if (index < 10)
keysTop.add(keys[index]).width(keySize).height(keySize + 5).pad(2);
else if (index < 19)
keysMid.add(keys[index]).width(keySize).height(keySize + 5).pad(2);
else
keysBot.add(keys[index]).width(keySize).height(keySize + 5).pad(2);
}
// add each row of keys to the keyboard Table
keyboard.add(keysTop).pad(5).expandX().fill().row();
keyboard.add(keysMid).pad(5).expandX().fill().row();
keyboard.add(keysBot).pad(5).expandX().fill().row();
stage.addActor(keyboard);
现在我想为每个键添加侦听器,最好是在循环中。将以下代码放在for循环的末尾:
keys[index].addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
System.out.println(letter);
}
});
因为错误而无法编译“从内部类中访问变量'字母',需要声明为final”。 什么是首选(或最简单,如果首选,难以为初学者实施)解决方案?
答案 0 :(得分:0)
letter
字符串声明为final
或
keys[index]
设置setName(String name)
TextButton的名称,并使用事件更改方法fetch targetListener
内部。