如何在 libgdx scene2d 中检查树是否被击中?

How to check if Tree was hit or not in libgdx scene2d?

基本上,如果用户没有点击树,我只想清除树的选择。我当前的代码是:

    entityTree.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (entityTree.getNodeAt(y) == null) {
                entityTree.getSelection().clear();
            }
        }
    });

但它不起作用有两个原因:

  1. clicked 只有在树被实际点击时才会被调用。如果点击发生在某个按钮或其他任何地方,树不会获得点击事件。
  2. 当前代码仅检查 y 分量。它应该与检查是否命中树边界的代码结合使用。
    tree.getStage().addListener(new InputListener() {
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            if (tree.getStage().hit(x, y, true) != tree || tree.getNodeAt(y) == null)
                tree.getSelection().clear();
            return false;
        }
    });