簡體   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