4个版本 (2个重大更新)
0.3.1 | 2023年11月19日 |
---|---|
0.3.0 | 2023年8月26日 |
0.2.0 | 2023年8月14日 |
0.1.0 | 2023年8月14日 |
#601 in 数据结构
29KB
581 代码行
ldtk_map
一个crate,用于将LDtk v1.3.4地图读取到更易于用户使用的(具有偏见地读取)数据结构中,以便在游戏中使用。
这个crate是用来做什么的?
LDtk地图包含大量开发者可能不需要使用的数据。这个crate实现了LDtk地图的struct,但通过DesignMap进行了抽象。DesignMap只包含少量数据,但这是我构建游戏时发现必要的。因此,这个crate的目标是在处理这些文件时提供一个简单的接口。它应该是一个适合初学者在Rust中制作游戏的优秀crate。然而,这个crate并不是试图给你访问LDtk文件上每个字段的权限。幸运的是,一些其他优秀的开发者也创建了可能更适合你用例的crate
ldtk 注意:注意许可证
添加到您的项目中
Cargo.toml
ldtk_map = { version = "0.3.1" }
** 或在您的命令行中 **
cargo add ldtk_map
示例
DesignMap
和子结构的公共接口旨在尽可能简单。
use ldtk_map::prelude::*;
fn main() {
// Replace with your ldtk file!
let my_design = DesignMap::load("../tests/testmaps/two_tileatlases.ldtk");
// Get some info about your tile in Level_0 at (0, 0)
my_design.levels().get("Level_0").unwrap().level()[0].atlas_index();
// Use in your game by reading to your own map data struct
convert_to_games_map(&my_design);
}
关于您的游戏的一些假设(如何使用库)
- 实体数据存储在LDtk文件之外,除了“实体”层的实体名称。
- 所有层都使用相同的像素大小用于瓦片集。
- 一旦LDtk文件在游戏中加载,在整个程序生命周期中就不会重新加载。
- 您将管理关卡之间的连接。(考虑解决这个问题)
- 您将遵循以下地图格式
LDtk地图格式
地图必须使用指南进行格式化,否则它将无法正确加载到DesignMap
。
- 只使用一个世界,并将自由形式的关卡放置在世界上。
- “地面”层必须在项目中始终定义,因为它用于每个关卡以获取以下值:
width
、height
、grid_size
和tileset_name
。 - 实体必须放置在“实体”层上。
- 值可以放置在“值”层上。
- 提到的所有层都必须在每个关卡中。
贡献和问题
每个人都非常欢迎提交功能请求和错误修复。我将尽可能地频繁地检查这些内容,并尝试相应地处理它们。
依赖项
~0.7–1.6MB
~35K SLoC