【问题标题】:Tiled and MonoGame.Extended - How to handle collisions?Tiled 和 MonoGame.Extended - 如何处理碰撞?
【发布时间】:2020-06-11 13:49:21
【问题描述】:

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

我尝试在我使用的图块集的某些图块上设置属性,但问题是我无法从 MonoGame.Extended 访问它们,实际上该库似乎不是为此目的而设计的,我没有'不明白为什么。

即当我查看TiledMapTile 类时,根本没有属性,当然有来自TiledMapTileset 类的TiledMapTilesetTile 对象包含属性,但是我怎样才能从某个位置获取这个对象?我想要的是这样的:

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

我也对其他处理冲突的方法持开放态度,或者通过使用另一个 C# Tiled 支持 MonoGame/XNA 的库,或者通过改变我解决这个问题的方法,并找到一个完全不同的解决方案。

提前致谢!

【问题讨论】:

    标签: c# collision-detection monogame tiled


    【解决方案1】:

    如果您愿意,您可以随时将您使用的瓦片地图导出为 JSON。见JSON-map-format

    Tiled 可以将地图导出为 JSON 文件。为此,只需选择“文件 > 导出为”并选择 JSON 文件类型。您可以从 带有 --export-map 选项的命令行。

    在 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.
    }
    

    【讨论】:

    • 好的,我明白了!我将使用一个图层进行碰撞,一切都会变得更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多