LibGDX - 表上的InputListener边界

时间:2014-02-13 18:45:06

标签: libgdx tablelayout

我在表上设置了一个InputListener,并重写了mouseMoved。我希望当鼠标移动到屏幕上的任何位置时接收输入,但是现在它仅在鼠标移动到表格内的任何小部件时接收输入(参见屏幕截图中的红色框)。

font = new BitmapFont( );
style = new Label.LabelStyle( font, Color.WHITE );

xLabel = new Label( "x: ", style );
yLabel = new Label( "y: ", style );
xNum = new Label( "0", style );
yNum = new Label( "0", style );

this.setFillParent( true );
System.out.println( this.getWidth() + ", " + this.getHeight() );

this.addListener(new InputListener() {
    @Override
    public boolean mouseMoved(InputEvent event, float x, float y) {
        xNum.setText( String.valueOf( x ) );
        yNum.setText( String.valueOf( y ) );
        return true;
    }
});

this.left().top();
this.add(xLabel).padLeft( 5 );
this.add( xNum );
this.row();
this.add( yLabel ).padLeft( 5 );
this.add( yNum );

this.debug();

enter image description here

2 个答案:

答案 0 :(得分:2)

大多数libgdx Actor's handle inputs by default,does not.
The reason: In the constructor of
setTouchable(Touchable.childrenOnly); is called, which disables touchable for this widget, but enables it for its children. This is why input is only received over the表的小部件。

setTouchable( Touchable.enabled );解决了这个问题

答案 1 :(得分:0)

如果将InputListener绑定到窗口小部件,那就是常规函数。当然它已经绑定到Widget,仅此而已。所以它与小部件的大小有关。

如果您想要收听所有事件,您需要编写InputProcessor并自行处理事件。 使用InputProcessor接口并将处理器添加到gdx。

Gdx.input.setInputProcessor(yourProcessor);

舞台已经是一个输入处理器,并向处于该位置的演员发射所有事件。例如,您可以使用舞台进行良好的事件处理,以了解是否单击了某个拼贴或某个角色。但如果你喜欢更复杂的东西,你可以创建自己的InputProcessor。但是如果你愿意,可以在舞台上添加一个监听器并获取所有移动事件。这也是一个解决方案。 stage.addListener(listener);

  1. 另请参阅听众和活动部分的Scene2D 为了更加澄清。
  2. Wiki InputProcessor
  3. 否则,请调整桌面大小以适应屏幕大小,并获得鼠标的所有移动。但我不建议这样做。您需要了解的所有内容,您可以在git wiki from the Table layout

    找到