繁体   English   中英

Libgdx和TiledMap的协调问题

[英]Coordinate Issue with Libgdx and TiledMap

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

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

             }
        }
        }

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

 @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

让我尝试调整一下,只是为了清理一点。 我敢肯定,在绘制之前,您只需要开始一批即可。 因此,我认为没有必要将其嵌入到您的循环中。

控制台显示屏上应该有几件事可以进一步调试,

您可以在需要将某些内容输出到控制台时尝试添加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();
}

在尝试查找绘制对象的位置时,将日志添加到代码中会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM