Essayer de faire un simple jeu de frappe. J'ai créé un clavier consistant en LibGDX scene2d TextButtons et en les mettant dans 3 Tables scene2d (pour chaque rangée de clés) et en les enveloppant dans une autre Table. Voici le code à ce jour:Clavier primitif LibGDX avec un écouteur pour chaque touche
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);
Maintenant, je voudrais ajouter les auditeurs à chaque clé, de préférence dans une boucle. Mettre le code suivant à la fin de la boucle:
keys[index].addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
System.out.println(letter);
}
});
ne compile pas à cause de l'erreur « Variable « lettre » est accessible à partir de la classe interne, doit être déclarée finale ». Quelle est la solution préférée (ou la plus simple si on préfère la mettre en œuvre pour un débutant) ici?
Déclarer la variable comme finale a fonctionné. Auparavant, je supposais qu'il ne pouvait pas être défini comme final, car les variables finales ne devraient pas changer. Ai-je raison de penser que dans cette situation cela fonctionne, parce que je déclare de nouveau cette variable à chaque passage de la boucle for? – elesmod