当前位置: 首页 > 知识库问答 >
问题:

与Libgdx和TiledMap协调问题

葛嘉悦
2023-03-14

我对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

而对象在平铺贴图编辑器中的坐标为:

X: 14,062
Y: 5,156

共有1个答案

尉迟宇定
2023-03-14

让我试着调整一下,把事情弄清楚一点。我很确定你只需要在绘图前开始一批。所以我不认为有必要将其嵌入到for循环中。

控制台显示屏上应该有一些东西可以进一步调试,

您可以尝试添加Gdx。应用程序。每当需要输出到控制台时,使用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();
}

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

 类似资料:
  • 我的布局结构如下: 当我将RecyclerView添加到布局时,NestedScrollView将位于AppBarLayout下,如下图所示: 我测试了一些解决这个问题的方法,比如将NestedScrollView放入FrameLayout,或者向NestedScrollView添加和属性,但这些方法无法解决这个问题。

  • 我刚刚迁移到最新的spring Boot2.0.1.Release,并开始使用云版本“finchley.rc1”。我正在使用consul作为配置和服务注册表/发现服务器。但一旦我启动应用程序,它就会尝试从“localhost:8888”加载配置,这是针对Eureka的。我在application.properties中配置了领事主机和端口,但仍然看到相同的行为。 通过搜索,我发现spring cl

  • 我的LibGdx程序有问题。我给了我的相机800高480宽。我正在坐标下绘制目标: 但是点击目标后,我的炮弹不会重叠目标矩形。 我在Touch中这样做: 不起作用。 这是一个炮弹游戏: 首先,我正在设置相机。 随机显示坐标范围内的目标。 使用Vector3新位置触摸取消投影相机。 触摸时,用加农炮位置计算目标位置并获得旋转加农炮的角度。 旋转大炮后,我向目标发射球。 现在,当我执行Rectangl

  • 我已经在互联网上闲逛了很长一段时间,我想知道如何在不打开不同端口的情况下一起使用BufferedReader和DataInputStream。我尝试过流式图像,但由于缓冲读取器存储了额外的字节,它创建了一个损坏的图像。当我尝试使用datainputstream.read()时,我无法轻松地读取整行文本。我的问题有什么解决办法吗?

  • TiledMap(地图)用于在游戏中显示 TMX 格式的地图。 点击 属性检查器 下方的 添加组件 按钮,然后从 渲染组件 中选择 TiledMap,即可添加 TiledMap 组件到节点上。 TiledMap 的脚本接口请参考 TiledMap API。 TiledMap 属性 属性 功能说明 Tmx Asset 指定 .tmx 格式的地图资源 详细说明 添加 TiledMap 组件之后,从 资

  • 问题内容: protocol BasePresenterProtocol : class {} protocol DashboardPresenterProtocol : BasePresenterProtocol {} 在上面的代码中,我在下一行收到错误 ,但未确认协议,但我已在中声明。虽然我已经宣布 为什么会出现此错误?请让我知道我在这段代码中做错了什么。 问题答案: 您不能使用type 属性