You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX中TMX地图未对齐x=0位置的问题求助

LibGDX TMX地图偏移问题:地图未在x=0位置加载

问题描述

玩家与相机均正确生成在x=0位置,但TMX地图加载时出现位置偏移,导致显示错位。

相关代码与资源

1. TMX地图文件片段

<map version="1.0" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="32" height="16" tilewidth="16" tileheight="16" infinite="0" nextlayerid="2" nextobjectid="1">
  <tileset firstgid="1" source="tileset.tsx"/>
  <layer id="1" name="Ground" width="32" height="16">
    <data encoding="base64" compression="zlib">
      eJztmDEKwjAQANBdC7iU2Fd4hVvQeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9QeG9Q=
    </data>
  </layer>
</map>

2. MapGame类核心代码

public class MapGame extends Game {
    private OrthographicCamera camera;
    private TiledMap map;
    private TiledMapRenderer renderer;

    @Override
    public void create() {
        camera = new OrthographicCamera();
        camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        camera.position.set(0, 0, 0); // 相机定位在x=0处

        map = new TmxMapLoader().load("map.tmx");
        renderer = new OrthogonalTiledMapRenderer(map);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        renderer.setView(camera);
        renderer.render();

        // 渲染玩家(玩家生成在x=0位置)
        Player player = new Player();
        player.render(camera);
    }

    @Override
    public void dispose() {
        map.dispose();
        renderer.dispose();
    }
}

3. Player类核心代码

public class Player {
    private Sprite sprite;
    private Vector2 position;

    public Player() {
        Texture texture = new Texture("player.png");
        sprite = new Sprite(texture);
        position = new Vector2(0, 0); // 玩家初始位置x=0
        sprite.setPosition(position.x, position.y);
    }

    public void render(OrthographicCamera camera) {
        SpriteBatch batch = new SpriteBatch();
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        sprite.draw(batch);
        batch.end();
    }
}

4. 截图

  • Tiled编辑器中的地图:Tiled编辑器中的地图
  • 游戏内错误显示:游戏内地图偏移截图

解决方法

1. 检查Tiled地图偏移设置

打开Tiled编辑器,选中地图后查看属性面板,确认x offset和y offset均设置为0,避免地图本身自带偏移量。

2. 对齐相机与Tiled坐标系统

LibGDX默认相机以屏幕中心为原点,而Tiled地图以左上角为原点,调整相机初始化代码对齐坐标:

camera = new OrthographicCamera();
camera.viewportWidth = Gdx.graphics.getWidth();
camera.viewportHeight = Gdx.graphics.getHeight();
// 将相机原点设为左上角,匹配Tiled地图坐标系
camera.setToOrtho(true, camera.viewportWidth, camera.viewportHeight);
camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0);

3. 修正瓦片集偏移

打开Tiled中的瓦片集属性面板,确认tile offset x和tile offset y为0,避免瓦片集自带偏移导致整个地图错位。

4. 手动修正地图渲染位置

如果以上方法无效,可在渲染地图时手动调整偏移:

@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    renderer.setView(camera);
    
    // 手动平移地图到x=0位置
    renderer.getBatch().begin();
    renderer.getBatch().translate(-mapOffsetX, -mapOffsetY, 0);
    renderer.render();
    renderer.getBatch().end();

    Player player = new Player();
    player.render(camera);
}

内容的提问来源于stack exchange,提问作者osker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:55:11