与Libgdx和TiledMap协调问题

时间:2014-08-07 14:29:55

标签: java android coordinates

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

             }
        }
        }

这是我如何在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

1 个答案:

答案 0 :(得分:0)

让我试着调整一下,只是为了清理一下。我非常确定你只需要在绘图之前开始一批。因此,嵌入然后进入循环,我认为没有必要。

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

只要您需要输出到控制台,就可以尝试添加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();
}

在您尝试找出对象的绘制位置时,向代码添加日志会有所帮助。