LibGDX原始键盘,每个键都有一个监听器

时间:2017-09-13 21:51:11

标签: java libgdx listener

尝试制作简单的打字游戏。我创建了一个由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”。 什么是首选(或最简单,如果首选,难以为初学者实施)解决方案?

1 个答案:

答案 0 :(得分:0)

  • letter字符串声明为final

  • 使用keys[index]设置setName(String name) TextButton的名称,并使用事件更改方法fetch targetListener内部。