【问题标题】:Drawing rectangle and shape-rendered rectangle at mouse position在鼠标位置绘制矩形和形状渲染矩形
【发布时间】:2019-04-20 07:28:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    我认为您应该阅读有关coordinate systems 的信息。鼠标系统是 y-down 和屏幕相关的,而(如果我没记错的话)相机是 y-up、居中并使用视口大小。

    我建议将StagemouseMovedtouchDragged 事件的侦听器一起使用,这些事件具有舞台坐标。将绘制矩形的演员添加到舞台。然后,您可以相应地移动演员。您不必处理坐标系更改。

    它可能看起来像这样:

    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 了解如何在演员中绘制矩形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多