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;
}
}