【问题标题】:LibGDX how to get button from clickListenerLibGDX如何从clickListener获取按钮
【发布时间】:2017-02-21 13:50:38
【问题描述】:

说实话,我不知道自己做错了什么。我想从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());
        }
    });       
}

【问题讨论】:

  • “什么”?你有错误吗?您是否尝试过单步执行?
  • 不,我没有错误,但是对于所有按钮 selectedUnit 在单击后的值始终相同。
  • 什么是getButton()?我猜它会返回 button,这将永远是创建的最后一个按钮。
  • 哦,这很有趣,我什至没有注意到 - getButton() 返回 int,它由 ClickListener() 方法的参数设置。

标签: java button libgdx imagebutton


【解决方案1】:

如果你在actor中有层次结构,使用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,但如果您单击标签 Actor 之一,它将不起作用(父级将是对应的图片按钮)

最好的办法是通过event.getListenerActor()获取创建EventListener的Actor

【讨论】:

    【解决方案2】:

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

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

    请注意,如果您将侦听器用于其他类型的 Actor,您将获得投射异常

    【讨论】:

    • 它对我有用。我无法将 Actor 投射到 ImageButton,但我得到了父级并且它现在正在工作。谢谢。
    • 很高兴为您提供帮助,如果回答解决了您的问题,您可以accep it
    猜你喜欢
    • 2012-07-07
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2023-03-28
    • 2015-02-27
    相关资源
    最近更新 更多