在鼠标位置绘制矩形和形状渲染矩形

时间:2019-04-20 07:28:50

标签: java libgdx

我正在尝试绘制一个跟随鼠标并位于鼠标下方的边界框,但是矩形不会随其移动,它移动得太快或太慢,并且移动的位置不正确。

我尝试获取鼠标坐标并将其传递到矩形中,然后在其位置绘制一个矩形,以便查看其位置。

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();

当鼠标移动时,该框的确移动了,但是它的移动速度太快了,并且没有按预期的那样定位在鼠标下方(有很大的偏移量,并且似乎是倒转的,但是当我将其设为负数时,它仍然不起作用)

1 个答案:

答案 0 :(得分:0)

我认为您应该阅读有关coordinate systems的信息。鼠标系统是y向下且依赖于屏幕的,而(如果我没记错的话)相机是y向上,居中并使用视口的大小。

我建议将Stage与带有阶段坐标的mouseMovedtouchDragged事件的监听器一起使用。添加一个在舞台上绘制矩形的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