我正在尝试绘制一个跟随鼠标并位于鼠标下方的边界框,但是矩形不会随其移动,它移动得太快或太慢,并且移动的位置不正确。
我尝试获取鼠标坐标并将其传递到矩形中,然后在其位置绘制一个矩形,以便查看其位置。
mouseRect是在鼠标位置绘制的矩形:
mouseRect.set((float)Gdx.input.getX(), (float)Gdx.input.getY(), 32, 32);
这是我的render方法,旨在在mouseRect的位置绘制一个矩形:
shapeRenderer.setProjectionMatrix(cam.combined);
shapeRenderer.begin(ShapeType.Filled);
shapeRenderer.setColor(Color.BLUE);
shapeRenderer.rect(mouseRect.x, mouseRect.y, mouseRect.width, mouseRect.height);
shapeRenderer.end();
当鼠标移动时,该框的确移动了,但是它的移动速度太快了,并且没有按预期的那样定位在鼠标下方(有很大的偏移量,并且似乎是倒转的,但是当我将其设为负数时,它仍然不起作用)
答案 0 :(得分:0)
我认为您应该阅读有关coordinate systems的信息。鼠标系统是y向下且依赖于屏幕的,而(如果我没记错的话)相机是y向上,居中并使用视口的大小。
我建议将Stage
与带有阶段坐标的mouseMoved
或touchDragged
事件的监听器一起使用。添加一个在舞台上绘制矩形的actor。然后,您可以相应地移动演员。您无需处理坐标系更改。
它看起来像这样:
Actor rectangleActor = new RectangleActor();
stage.addActor(rectangleActor);
stage.addListener(new InputListener() {
public boolean mouseMoved(InputEvent event, float x, float y) {
rectangleActor.setPosition(event.getStageX(), event.getStageY());
return false;
}
})
有关如何在actor中绘制矩形的信息,请参见this answer。