提问者:小点点

平铺和一夫一妻制。扩展-如何处理冲突?


我用平铺来编辑我的地图,我想用我的游戏设置一个碰撞系统。

我尝试在我使用的Tileset的一些tiles上设置属性,但问题是我无法从Monogame.Extended访问它们,实际上库似乎不是为这个目的设计的,我也不明白为什么。

例如,当我在TiledMaptile类中查看时,根本没有属性,当然,在TiledMaptileSet类中有包含属性的TiledMaptile对象,但是我如何从一个位置获得这个对象呢? 我想要的是这样的东西:

bool isCollisionTile = tiledMap.GetTile(x, y).Properties["IsCollisionTile"];

我也愿意采用其他方法来处理冲突,要么使用另一个C#平铺的Monogame/XNA支持库,要么改变我处理这个问题的方法,找到一个完全不同的解决方案。

提前谢谢!


共1个答案

匿名用户

如果您愿意,您总是可以将您使用的平铺映射导出到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.
}