可触发禁用后的Scene2d单击事件

时间:2015-01-31 08:19:05

标签: libgdx scene2d

假设我们有下一个演员的场景:

  • WidgetGroup root;
  • 按钮按钮。 按钮是root的子项。

现在看看下一步:

  1. 按下按钮;
  2. 将root touchable设置为disabled;
  3. 按下按钮;
  4. 按钮点击事件发生。
  5. 在我看来,它看起来很不对劲。当然TouchListener有cancel()方法,我们可以只调用它来修复它,但如果root由十几个可触摸的actor组成,那该怎么办...

    那么,我是否错过了一些东西或者什么是禁用整组触摸的正确方法?

1 个答案:

答案 0 :(得分:1)

在此讨论后https://github.com/libgdx/libgdx/issues/2789

现在可能最好的解决方案是编写实用程序方法,取消整个组层次结构的触摸焦点。像这样:

public static void cancelTouchFocus(Stage stage, Actor actor) {
    stage.cancelTouchFocus(actor);

    if (actor instanceof Group) {
        SnapshotArray<Actor> children = ((Group)actor).getChildren();
        if (children.size > 0) {
            Object[] snapshot = children.begin();
            for (int i = 0; i < children.size; i++) {
                cancelTouchFocus(stage, (Actor)snapshot[i]);
            }
            children.end();
        }
    }
}

当然你可以调用Stage#cancelTouchFocus(Actor actor),但在这种情况下,你可能会破坏这个特定组之外的其他一些演员的活跃触摸周期。

检查上面提到的github问题以获取其他解决方案和想法。