LibGDX如何从clickListener获取按钮

时间:2017-02-21 13:50:38

标签: java button libgdx imagebutton

说实话,我不知道我做错了什么。我想从ImageButton获取ClickListener对象,但出现问题。

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

2 个答案:

答案 0 :(得分:1)

event.getTarget()可能会很危险,如果角色中有层次结构。

例如,假设您有:

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)

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

创建EventListener

答案 1 :(得分:0)

要获取触发了哪个事件的Actor实例,您需要使用getTarget()事件的方法。如果您确定该监听器仅用于按钮,则可以将其从Actor转换为Button

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

请注意,如果您将侦听器用于其他类型的Actor,您将获得强制转换异常