我在表上设置了一个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();
答案 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);
否则,请调整桌面大小以适应屏幕大小,并获得鼠标的所有移动。但我不建议这样做。您需要了解的所有内容,您可以在git wiki from the Table layout
找到