9个版本 (4个重大更新)

0.5.0 2021年11月27日
0.4.1 2021年11月17日
0.3.1 2021年11月4日
0.2.0 2021年10月25日
0.1.3 2021年10月20日

#826 in 游戏开发

每月27次下载

Unlicense

60KB
1K SLoC

tego

Documentation Crates.io License

tego 是一个解析和加载 Tiled 地图的库。

目标

tego的主要目标是提供一个加载tmx地图的基础,与游戏引擎或存储介质无关。地图无论是存储在磁盘上的文件,还是从资源包中动态加载,都不应该有任何影响。

此外,应通过合理的默认值使常见操作变得简单,但不应以牺牲灵活性为代价。

示例

加载一个地图并打印其中的层

use std::path::Path;
extern crate tego;

fn main() -> tego::Result<()> {
    // Load a tmx file.
    // Map::from_file() is the easiest, but least flexible method for loading a map.
    // Images referenced by the map are not loaded, instead only the path is returned as string.
    let map = tego::Map::from_file(Path::new("example-maps/default/groups.tmx"))?;

    // Keep track how much we need to indent for some nice pretty printing
    let mut indent = 0;

    for (layer, groups_left) in map.iter_layers() {
        // Reduce indentation by the amount of groups left
        indent -= groups_left;

        // print indentation to highlight hierarchy
        print!("{}", "  ".repeat(indent));

        use tego::Layer::*;
        match layer {
            Tile(layer) => {
                println!("Layer '{}' with {}x{} tiles", layer.name, layer.size.x, layer.size.y);
            },
            Group(layer) => {
                println!("Group layer '{}' with {} sub-layers", layer.name, layer.content.len());

                // increase indentation for all layers part of this group
                indent += 1;
            },
            Object(layer) => {
                println!("Layer '{}' containing {} objects", layer.name, layer.content.len());
            },
        }
    }
    Ok(())
}

您可以使用以下命令运行此示例:cargo run -q --example layer_printer

功能支持

以下TMX功能在tego中实现 ✅,部分支持 🚧 或缺失 ❌。这不是一个详尽的列表。

  • 🚧 加载具有元数据的地图

    • ✅ 正交和等距地图
    • ❌ 六边形和交错地图
    • ❌ 与编辑器相关的元数据
    • ✅ 颜色信息
  • 🚧 瓦片集

    • ✅ 元数据
    • ✅ 带有间距/边距的精灵表查找
    • ✅ 外部瓦片集文件 (*.tsx)
    • ❌ 图像集合瓦片集
    • ❌ 对象对齐信息
  • 🚧 瓦片层

    • ✅ 未压缩/zlib/gzip base64数据
    • ❌ csv加载
    • <tile>加载
    • ✅ 瓦片翻转
  • ❌ 无限地图

  • 🚧 对象层

    • ✅ 基本的矩形/椭圆/点对象
    • ✅ 多边形和多段线
    • 🚧 文本(某些元数据尚未支持,例如haling/valign)
    • ✅ 对象模板
  • ❌ 图像层

  • ✅ 属性

依赖关系

~1.2–1.7MB
~35K SLoC