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次下载
60KB
1K SLoC
tego
目标
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