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