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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在鼠标位置绘制矩形和形状渲染矩形相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

我想你应该读一下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

以上是关于在鼠标位置绘制矩形和形状渲染矩形的主要内容,如果未能解决你的问题,请参考以下文章

CorelDraw矩形工具的使用方法和应用技巧

如何在 PyQt5 中通过拖放来绘制矩形并调整其形状

libgdx 通过鼠标单击绘制矩形

在画布上用鼠标绘制矩形与鼠标坐标不同步

OpenGL随机大小矩形代码更改绘制的矩形

如何绘制多个形状