Libgdx 场景2d';使用自定义角色单击侦听器

Libgdx 场景2d';使用自定义角色单击侦听器,libgdx,scene2d,clicklistener,Libgdx,Scene2d,Clicklistener,在场景2D中,如果我有一个自定义的参与者,我如何使我的ClickListener能够引用该“customActor”的字段和方法?例如,由于enter方法是: public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { ... } 问题是,fromActorActor引用看不到我想在CustomActor中修改的字段。。。我知道我可以做一些事情: public void enter(

在场景2D中,如果我有一个自定义的参与者,我如何使我的ClickListener能够引用该“customActor”的字段和方法?例如,由于enter方法是:

public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { ... }
问题是,
fromActor
Actor引用看不到我想在
CustomActor
中修改的字段。。。我知道我可以做一些事情:

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

但对我来说,这是不对的,必须有一个更有效的方法;因此,如果您知道一个,请让我知道:D

在实例化此click listener的类中,添加一个如下所示的内部类:

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;
    }
}
当然,您可以覆盖所需的任何方法,而不仅仅是
enter

然后像这样使用它

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

我通常是这样设置的,但是您可以将自定义侦听器类代码放在任何需要的地方,或者为其创建单独的类文件并导入它。

如果此参与者的所有实例都使用相同类型的click listener,您可以将click listener定义为参与者的内部类,或者可以从参与者的构造函数中将其实例化为匿名类。如果没有,请将您的参与者分配给定义了click listener的同一类中的成员变量,并在click listener的方法中引用该成员变量。但是,对于相同类型的参与者,我是否可以只有一个侦听器?”“同一类型”是指同一类的多个参与者。