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 文件并导入它。
在 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 文件并导入它。