我在舞台上添加了一个表,但无法为其触发点击侦听器:
Table table = new Table();
table.setX(0);
table.setY(0);
table.setWidth(300);
table.setHeight(300);
table.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
System.out.println("click");
}
});
stage.addActor(table);
我在桌子上设置了一个背景九补丁,它的渲染效果很好。单击无效。如果我在表中添加标签或按钮之类的东西,然后为这些小部件设置相同的ChangeListener,则监听器会正常启动。
Table需要一些特殊处理才能使其正常工作吗?
谢谢
---------更新-------------------
我可以使它起作用的唯一方法是使用EventListener阻止Table实例上的所有交互:
table.addListener(new EventListener() {
@Override
public boolean handle(Event event) {
return true;
}
});
所有事件都会按预期在此处触发。
我还尝试将表设置为可触摸,但ChangeListener仍不会触发:
table.setTouchable(Touchable.enabled);
table.setListener(....);
因此,我想我将坚持使用EventListener方法。
最佳答案
默认情况下,libgdx中的Table
并非touchable
,在其构造函数setTouchable(Touchable.childrenOnly);
(请看source)中被调用,这意味着该Actor
(“表”)不会获得任何输入事件,但其子项会(查看javadoc)。
因此,要为Table
而不是为其子项启用输入事件,您需要调用setTouchable(Touchable.enabled)
。
我希望这能解决您的问题。
关于libgdx - libgdx表无法获取ChangeListener来激发单击?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27241601/