Java LibGDX-在Ui Actor(窗口)中防止滚动事件不起作用,但其他事件起作用

Java LibGDX-在Ui Actor(窗口)中防止滚动事件不起作用,但其他事件起作用,java,android,events,libgdx,Java,Android,Events,Libgdx,正如在标题中一样,当您想阻止传播某些事件时,您可以自由移动,但有一个事件“滚动”。它就是不起作用。有人能告诉我为什么吗 Window abc = new Window("Tools", skin); abc.setY(5); abc.setResizable(false); abc.setMovable(false); abc.setPosition(Gdx.graphics.getWidth() - 300, 0); abc.setSize(300, Gdx.graphics.getHeigh

正如在标题中一样,当您想阻止传播某些事件时,您可以自由移动,但有一个事件“滚动”。它就是不起作用。有人能告诉我为什么吗

Window abc = new Window("Tools", skin);
abc.setY(5);
abc.setResizable(false);
abc.setMovable(false);
abc.setPosition(Gdx.graphics.getWidth() - 300, 0);
abc.setSize(300, Gdx.graphics.getHeight());
addActor(abc);

abc.addCaptureListener(new InputListener() {
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        return true; //it will stop event from being propagate
    }

    public boolean scrolled(InputEvent event, float x, float y, int a) {
        return true; //it wont stop event from being propagate (because method isn't even called!
    }
});

abc.addListener(new InputListener() {
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        return true; //it will stop event from being propagate
    }

    public boolean scrolled(InputEvent event, float x, float y, int a) {
        return true; //it wont stop event from being propagate (because method isn't even called!
    }
});

除此之外,addCaptureListener和addListener之间的区别是什么?

LibGDX UI的编码非常糟糕。。这是谁干的?下面的代码是滚动错误的解决方法。这很难看,因为它违反了libgdx的ui规则,但是这些规则也很难看

编辑(新解决方案)

(旧方案)

abc.addListener(new InputListener() {
    public void enter (InputEvent event, float x, float y, int pointer, Actor fromActor) {
        setScrollFocus(abc);
    }

    public void exit (InputEvent event, float x, float y, int pointer, Actor fromActor) {
        setScrollFocus(null);
    }

    public boolean scrolled(InputEvent event, float x, float y, int a) {
        return true; //now it works
    }
});
public class FixedStage extends Stage {
    Vector2 tempCoords = new Vector2();

    public FixedStage(Viewport viewport) {
        super(viewport);
    }

    @Override
    public boolean scrolled (int amount) {
        screenToStageCoordinates(tempCoords.set(Gdx.input.getX(), Gdx.input.getY()));

        Actor target = hit(tempCoords.x, tempCoords.y, true);
        if (target == null) target = getRoot();

        InputEvent event = Pools.obtain(InputEvent.class);
        event.setStage(this);
        event.setType(InputEvent.Type.scrolled);
        event.setScrollAmount(amount);
        event.setStageX(tempCoords.x);
        event.setStageY(tempCoords.y);
        target.fire(event);
        boolean handled = event.isHandled();
        Pools.free(event);
        return handled;
    }
}