我在舞台上添加了一个表,但无法为其触发点击侦听器:

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/

10-09 12:58