我用平铺来编辑我的地图,我想用我的游戏设置一个碰撞系统。
我尝试在我使用的Tileset的一些tiles上设置属性,但问题是我无法从Monogame.Extended访问它们,实际上库似乎不是为这个目的设计的,我也不明白为什么。
例如,当我在TiledMaptile
类中查看时,根本没有属性,当然,在TiledMaptileSet
类中有包含属性的TiledMaptile
对象,但是我如何从一个位置获得这个对象呢? 我想要的是这样的东西:
bool isCollisionTile = tiledMap.GetTile(x, y).Properties["IsCollisionTile"];
我也愿意采用其他方法来处理冲突,要么使用另一个C#平铺的Monogame/XNA支持库,要么改变我处理这个问题的方法,找到一个完全不同的解决方案。
提前谢谢!
如果您愿意,您总是可以将您使用的平铺映射导出到JSON。 请参见json-map-format。
Tiled可以将映射导出为JSON文件。 为此,只需选择“File>; 导出为“并选择JSON文件类型。 您可以使用--export-map选项从命令行导出json。
在monogame中加载JSON并从那里访问属性。
您可以使用FF:
int playerPosX = 0;
int playerPosY = 0;
int tileWidth = 32;
// TiledMap map
TiledMapTileLayer layer = map.GetLayer<TiledMapTileLayer>("Collision");
TiledMapTile? tile = null;
ushort x = (ushort)(playerPosX / tileWidth);
ushort y = (ushort)(playerPosY / tileWidth);
// Get tile based on player position
layer.TryGetTile(x, y, out tile);
if (tile.HasValue)
{
// collided!
// you can also compute the tile's position using the X, Y and tileWidth if needed.
}