Scene2D 的带有自定义 Actor 的 ClickListener

Scene2D's ClickListener with custom Actor

在 Scene2D 上,如果我有自定义 actor,如何使我的 ClickListener 能够引用该“customActor”的字段和方法?因为例如输入方法是:

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

在实例化此点击侦听器的 class 中,添加一个内部 class,如下所示:

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

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