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

LibGdx中有效tilemap读取MapObjects返回空的问题咨询

问题原因及解决方案
  • 层类型匹配错误:你当前代码强制将目标层转为TiledMapTileLayer(瓦片层),而Tiled编辑器里用来存放碰撞框的是对象层(Object Layer),瓦片层本身的getObjects()默认就是空集合,所有你手动绘制的碰撞形状都存在于对象层中,不需要强转为瓦片层。
    修复方式:将层获取代码改为:
    MapLayer mapLayer = map.getLayers().get(layer);
    MapObjects mapObjects = mapLayer.getObjects();
    
    同时确认你传入的layer参数对应的是对象层的索引,而非瓦片层的索引。
  • 瓦片附加碰撞的获取逻辑错误:如果你的碰撞形状是提前附加在瓦片集的单个瓦片上的(不是单独在对象层绘制的),这些碰撞数据不会存在于层的MapObjects中,而是存在于每个TiledMapTile的getObjects()属性里,你需要遍历瓦片层的所有格子,拿到每个有值的瓦片,再读取其附带的碰撞形状生成物理体。
  • 导出配置问题:部分版本的Tiled导出tmx文件时,如果没有勾选导出对象相关的配置,也会导致对象数据丢失,可以重新检查导出设置,确保对象层数据被写入tmx文件。

额外优化提示:PolygonShape属于需要手动释放的本地资源,创建完Fixture之后需要调用shape.dispose()释放,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:06:03