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

标签 java libgdx

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

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

mouseRect是在鼠标位置绘制的矩形:

mouseRect.set((float)Gdx.input.getX(), (float)Gdx.input.getY(), 32, 32);

这是我的渲染方法,旨在在 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 向下且取决于屏幕,而(如果我没记错的话)相机是 y 向上、居中并使用视口(viewport)大小。

我建议使用带有 mouseMovedtouchDragged 事件监听器的 Stage,这些事件具有舞台坐标。添加一个 Actor 在舞台上画一个矩形。然后您可以相应地移动 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;
    }
})

参见this answer了解如何在 actor 中绘制矩形。

关于java - 在鼠标位置绘制矩形和形状渲染矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55771299/

相关文章:

java - 在设备的本地存储上创建 Android 保存文件?

java ArrayList 删除元素

java - 使用 XPath 解析损坏的 HTML 站点

Java更改另一个类中的静态变量不会影响对象值

java - html5 libgdx 应用程序在哪里保存首选项文件?

android - libGDX- jogl 包在哪里?

Java:在声明具有整数常量的枚举时遇到问题

java - 如何验证这些表达式是否有效(所有括号配对 - 闭合)?

java - 如何从 java 中的 stringbuilder 对象中删除前 3 行

java - 如何使用 Polygon 类在 libGdx 中绘制六边形 map ?