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
相关产品推荐
相关产品推荐

