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

问题描述 投票:0回答:1

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

我已经尝试获取鼠标坐标并将它们传递到一个矩形,然后我在它的位置绘制一个矩形,这样我就能看到它的位置。

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

当鼠标移动时盒子确实会移动,但是它太快了并且它没有像预期的那样位于鼠标下方(有一个巨大的偏移并且似乎是倒置的但是当我使它变为负时它仍然不起作用)。

java libgdx
1个回答
0
投票

我想你应该读一下coordinate systems。鼠标系统是y-down和屏幕相关的,而(如果我没记错的话),相机是y-up,居中,并使用视口大小。

我建议使用StagemouseMovedtouchDragged事件的监听器,它们具有舞台坐标。添加一个绘制矩形的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

© www.soinside.com 2019 - 2024. All rights reserved.