2017-09-13 1 views
1

Der Versuch, ein einfaches Tippspiel zu machen. Ich habe eine Tastatur erstellt, die aus LibGDX scene2d TextButtons besteht und diese in 3 scene2d-Tabellen (für jede Reihe von Schlüsseln) einfügt und sie in eine andere Tabelle einfügt. Hier ist der Code so weit:LibGDX primitive Tastatur mit einem Listener für jeden Schlüssel

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); 

Nun möchte Ich mag Zuhörer zu jedem Schlüssel hinzuzufügen, vorzugsweise in einer Schleife. Setzen Sie den folgenden Code am Ende der for-Schleife:

keys[index].addListener(new ChangeListener() { 
    @Override 
    public void changed(ChangeEvent event, Actor actor) { 
     System.out.println(letter); 
    } 
}); 

wegen Fehler nicht kompilieren „Variable‚Brief‘von innen inneren Klasse zugegriffen wird, muss, final deklariert werden“. Was ist die bevorzugte (oder einfachste, wenn es für Anfänger schwer zu implementieren ist) Lösung hier?

Antwort

0
  • erklären letter String als final

oder

  • Setnamen von keys[index] TEXTBUTTON durch setName(String name) und innen geänderte Methode fetch targetListener Namen Ereignis verwendet wird.
+0

Die Variable als final deklarieren funktioniert. Früher nahm ich an, dass es nicht als endgültig festgelegt werden konnte, da sich die endgültigen Variablen nicht ändern sollten. Habe ich richtig gedacht, dass es in dieser Situation funktioniert, weil ich diese Variable mit jedem Durchlauf der for-Schleife neu deklariere? – elesmod

Verwandte Themen