2016-12-16 4 views
2

In Scene2D, f Ich habe einen benutzerdefinierten Akteur, wie kann ich meinen ClickListener dazu bringen, auf die Felder und Methoden von customActor zu verweisen? Da zum Beispiel gibt die Methode geht:Scene2Ds ClickListener mit benutzerdefiniertem Actor

public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { ... } 

Die Sache ist die, dass fromActor Schauspieler Referenz nicht um die Felder zu sehen, die ich in meinem CustomActor ändern will ... Ich weiß, dass ich auf etwas tun könnte :

public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {  
    if(fromActor instanceof CustomActor) { 
     CustomActor actor = (CustomActor)fromActor; 
    } 
} 

Aber mir, dass es fühlt sich nicht richtig, muss doch ein effizienter Weg sein; Wenn Sie also von einem wissen, lass es mich wissen: D

+0

Wenn alle Instanzen dieses Akteurs den gleichen Typ von Klick-Listener verwenden, können Sie den Klick-Listener als innere Klasse des Akteurs definieren, oder Sie können ihn als anonyme Klasse vom Konstruktor des Akteurs instanziieren. Ist dies nicht der Fall, weisen Sie Ihren Akteur einer Mitgliedsvariablen in derselben Klasse zu, in der Ihr Klick-Listener definiert ist, und verweisen Sie auf diese Mitgliedsvariable in den Methoden des Klick-Listeners. – Tenfour04

Antwort

0

In der Klasse, wo Sie diese Klick Zuhörer sind instanziiert wird, eine innere Klasse hinzufügen, die wie folgt aussieht:

class CustomListener extends ClickListener { 

    private final CustomActor yourActor; 

    public CustomListener(CustomActor yourActor) { 
     this.yourActor = yourActor; 
    } 

    @Override 
    public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { 
     this.yourActor.accessTheFieldYouWant; 
    } 
} 

Sie können natürlich auch alle außer Kraft setzen Methoden, die Sie brauchen, nicht nur enter.

dann verwenden, wie diese

yourActor.addListener(new CustomListener(yourActor) { 
    @Override 
    public void clicked(InputEvent event, float x, float y) { 
    } 
}); 

Das ist, wie ich normalerweise Dinge einrichten, aber Sie können den benutzerdefinierten Listener-Klasse Code setzen, wo immer Sie wollen, oder eine separate Klasse-Datei für sie und sie importieren.

+0

Aber kann ich nicht nur 1 Zuhörer für die gleiche Art von Schauspielern haben? "gleicher Typ" sind mehrere Akteure derselben Klasse. – Whiskydog

Verwandte Themen