Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与Libgdx和TiledMap协调问题_Java_Android_Coordinates - Fatal编程技术网

Java 与Libgdx和TiledMap协调问题

Java 与Libgdx和TiledMap协调问题,java,android,coordinates,Java,Android,Coordinates,我对Libgdx和tileMap之间的坐标有问题。 我通过TiledMap创建了一个贴图,并在上面添加了一个对象层矩形,我希望在Libgdx中渲染贴图时,在矩形的相同位置添加一个字体。 出于这个原因,我在render method中做了如下操作: @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BI

我对Libgdx和tileMap之间的坐标有问题。 我通过TiledMap创建了一个贴图,并在上面添加了一个对象层矩形,我希望在Libgdx中渲染贴图时,在矩形的相同位置添加一个字体。 出于这个原因,我在render method中做了如下操作:

 @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
而对象在平铺贴图编辑器中的坐标为:

X: 14,062
Y: 5,156

让我试着调整一下,把事情弄清楚一点。我很确定你只需要在绘图前开始一批。所以我不认为有必要将其嵌入到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值可以是平铺位置,而不是实际的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.drabutch,Test Position,rect.getRectangle.x*32,rect.getRectangle.y*32;32是瓷砖的宽度和高度,我这样做了,但问题仍然存在。我注意到关于X轴对齐的字体是正确的,但是它相对于Y轴的位置不好,所以你可以看到它,但是Y轴是关闭的?你想让字体居中吗?字体与地图上你绘制有困难的其他物体的位置相比有点下移了?在我看来,你只是想稍微调整字体的绘制位置。我对地图中的所有对象都有这个问题