LibGDX 如何从 clickListener 获取按钮

LibGDX how to get button from clickListener

老实说,我不知道自己做错了什么。我想从 ClickListener 获取 ImageButton 对象,但是出了点问题。

 public void createButton() {
    button = new ImageButton(this.skin);
    buttonUnitsList.add(button);
    button.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
           selectedUnit = buttonUnitsList.indexOf(this.getButton());
        }
    });       
}

要获取触发事件的 Actor 实例,您需要使用 getTarget() 事件的方法。如果您确定监听器将仅与按钮一起使用,您可以将其从 Actor 向上转换为 Button

selectedUnit = buttonUnitsList.indexOf((Button)event.getTarget());

请注意,如果您将侦听器用于另一种类型的 Actor,您将获得转换异常

event.getTarget() 如果在 actor 中有层次结构,使用起来可能很危险。

例如,假设您有:

Group Actor <= ImageButton Actor 1 <= Label Actor 1
            <= ImageButton Actor 2 <= Label Actor 2
            <= ImageButton Actor 3 <= Label Actor 3

并且您在 Group Actor 上创建一个 eventListener。

event.getTarget() 会给你准确点击的演员

例如,如果您单击“ImageButton Actor 2”,您可以尝试 event.getTarget().getParent() 获取 Group Actor,但如果您单击其中一个 Label Actor(父级将是对应的ImageButton)

最好的方法是通过 event.getListenerActor()

获取创建 EventListener 的 Actor