【问题标题】:Coordinate Issue with Libgdx and TiledMapLibgdx 和 TiledMap 的坐标问题
【发布时间】:2014-08-07 14:29:54
【问题描述】:

我对 Libgdx 和 TiledMap 之间的坐标有疑问。 我通过 TiledMap 创建了一个地图,并在其上添加了一个对象层(矩形),我希望在 Libgdx 中渲染地图时,在矩形的相同位置添加一个字体。 出于这个原因,在渲染方法中我这样做:

 @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        renderer.setView(camera);
        renderer.render();

        MapObjects collisionObjects = map.getLayers().get("Rectangle").getObjects();
        for(MapObject object : collisionObjects) {

            if (object instanceof RectangleMapObject) {

                RectangleMapObject rect = ((RectangleMapObject) object);

                batch.setProjectionMatrix(camera.combined);
                batch.begin();
                font.setUseIntegerPositions(false);
                font.draw(batch, "Test Position",rect.getRectangle().x,rect.getRectangle().y);
                batch.end();

             }
        }
        }

这是我在创建方法中设置相机和其他的方式:

 @Override
    public void create () {

        font = new BitmapFont();
        font.setColor(Color.BLACK);

        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        Gdx.input.setInputProcessor(this);

        camera = new OrthographicCamera(w,h);
        camera.translate(w/2, h/2);

        camera.update();

        batch = new SpriteBatch();

        map = new TmxMapLoader().load("TestRectangleMap.tmx");

        renderer = new OrthogonalTiledMapRenderer(map);

        }

我的问题是字体的绘制位置相对于瓷砖地图中矩形的位置不正确。

你能帮我理解问题出在哪里吗? 非常感谢您花费的时间。

坐标输出 我这样做了:

System.out.println("X: "+rect.getRectangle().x);
System.out.println("Y: "+rect.getRectangle().y);

我明白了:

X: 450.0
Y: 232.0

TiledMap 编辑器中对象的坐标为:

X: 14,062
Y: 5,156

【问题讨论】:

  • 如果您从平铺地图获取矩形地图对象,您需要知道 x 和 y 值可以是平铺位置,而不是实际的 x 和 y。要对此进行调试,您需要输出该矩形地图对象的 x 和 y 值。您可能需要做的是将 x 和 y 值乘以tilesize。例如:矩形的 x 和 y 值可以是 x = 6 y = 5。这意味着地图对象超过 6 个瓦片,向上 5 个瓦片。您需要将其转换为游戏的实际 x 和 y 值。
  • “您需要知道 x 和 y 值可以是图块位置而不是实际的 x 和 y”是什么意思。我注意到关于 X 轴字体对齐良好,而与 Y 没有对齐
  • 我为糟糕的打字道歉。我正在参加一个无聊的会议并在我的平板电脑上打字。您需要做的是输出矩形的 x 和 y 以调试此问题。
  • 如果我喜欢你说我,我看不到字体。为什么?
  • 我做了:font.draw(batch, "Test Position",rect.getRectangle().x*32 ,rect.getRectangle().y*32); 32 是瓦片的宽度和高度

标签: java android coordinates


【解决方案1】:

让我试着调整一下,只是为了稍微清理一下。我很确定你只需要在绘图之前开始一批。所以我认为没有必要将 then 嵌入到你的 for 循环中。

控制台显示屏上应该显示一些内容以进一步调试,

当您需要输出到控制台时,您可以尝试添加 Gdx.app.log() 方法。

@Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    renderer.setView(camera);
    renderer.render();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    MapObjects collisionObjects = map.getLayers().get("Rectangle").getObjects();
    for(MapObject object : collisionObjects) {
        if (object instanceof RectangleMapObject) {
            RectangleMapObject rect = ((RectangleMapObject) object);
            font.setUseIntegerPositions(false);
            font.draw(batch, "Test Position",rect.getRectangle().x,rect.getRectangle().y);
            Gdx.app.log("My Game", "Rect X: "+rect.getRectangle().x+" Y : "+rect.getRectangle().y);
         }
    }
    batch.end();
}

在您的代码中添加日志将有助于您尝试找出对象的绘制位置。

【讨论】:

  • 我这样做了,但问题仍然存在。我注意到关于 X 轴对齐的字体是正确的,而它相对于 Y 轴的位置不是很好
  • 所以你可以看到它,但 y 是关闭的?你想让字体居中吗?
  • 字体与应有的位置相比有点下移
  • 地图上是否还有其他无法绘制的对象?在我看来,您只是想稍微调整一下字体的绘制位置。
  • 我对地图中的所有对象都有这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多