Kann ich bei LibGDX einen InputListener für mehrere Buttons verwenden?
Ich programmiere nun zum ersten mal ein UI mit mehreren Buttons mit Scene2d.
Laut verschiedenen Tutorials fügt man jedem Button bzw. Actor einen eigenen InputListener hinzu und überschreibt die benötigten Methoden.
Meine Frage:
Ist es eine gute Idee die InputListener Klasse zu erweitern und an jeden Button quasi den selben Listener zu übergeben,
und dort dann mit equals zu unterscheiden welcher Button gedrückt wurde?
Scheint für mich wesentlich übersichtlicher zu sein.
Danke für eure Hilfe
2 Antworten
Ja das sollte möglich sein.
Die Methoden des `InputListener`s bekommen alle den Parameter "InputEvent". Dieses InputEvent hat eine Methode "getRelatedActor", welche den Actor liefert, welcher das Event ausgelöst hat.
Somit kannst du eine Instanz des InputListeners erstellen, welche sich den "RelatedActor" geben lässt. Dieser Actor kann dann mit deinen Buttons verglichen werden (mit "==", da es sich um die selbe Instanz des Actors handeln sollte) und je nach dem, welcher Actor es ist kannst du dann eben richtig reagieren.
Das Ganze könnte dann ca. so aussehen:
final TextButton b1 = new TextButon(...); final TextButton b2 = new TextButton(...); ClickListener listener = new ClickListener () { public void clicked(InputEvent e, float x, float y) { Actor actor = e.getRelatedActor(); if (actor == b1) // Button 1 else if (actor == b2) // Button 2 } }
Ich kenne LibGDX nicht, aber ich würde ein Key-Array mit demm Typ boolean machen und dann bei einem Tastendruck das jeweilige Teil auf true setzen, beim release der Taste auf false. Dann in einer Updatemethode testen, ob z.B. bollean Nr. 99 true entspricht und die jeweilige Aktion ausführen.
eins der obersten Google-Ergebnisse zu dem Thema posten bringt leider auch nichts, glaub mir ich hab schon viel über LibGDX und Scene2d gelesen bis ich die Frage hier gestellt habe :/ die Seite mit eingeschlossen
sorry leider bringt mir deine Antwort nichts, brauche jemanden der sich mit dem Listener System von Scene2d auskennt.. trotzdem danke
https://github.com/libgdx/libgdx/wiki/Event-handling ganz unten ist was.