10个版本 (5个重大更新)
0.6.0 | 2022年5月9日 |
---|---|
0.5.3 | 2022年4月4日 |
0.5.2 | 2021年4月23日 |
0.4.1 | 2021年3月22日 |
0.1.0 | 2020年12月22日 |
#257 in 游戏开发
214 每月下载量
在 2 crates 中使用
2MB
6K SLoC
LDtk Rust库
ldtk_rust允许在Rust中访问LDtk数据。LDtk是一个支持多个瓦片层、强大的自动瓦片规则、实体放置等功能的2D关卡编辑器。
状态
此库与LDtk版本 1.1.3
兼容,并支持可选的外部关卡文件。LDtk会自动保存更新后的文件,因此没有必要使用旧版本,但如果您正在使用旧版本(或在此crate更新之前获取了新版本),您可以按照以下过程生成针对您想要使用的LDtk版本代码。或者,如果您想完全不使用任何库并直接在游戏中嵌入代码,请查看此过程。
入门
通过在LdtkFile结构体上调用new()方法并传入LDtk文件的路径,将填充一个与LDtk JSON格式非常相似的结构体。
use ldtk_rust::Project;
fn main() {
let ldtk = Project::new( "assets/test_game.ldtk");
println!("First level pixel height is {}!", ldtk.levels[0].px_hei);
}
您的编辑器的自动完成功能应该可以帮助您可视化选项,或者您可以使用"cargo doc --open"生成API文档,或在这里查看它们。
运行示例
您可以使用cargo在示例文件夹中运行程序
> cargo run --example basic
示例依赖项在编译用于生产的库时不会加载。
在实际游戏中使用
在Bevy引擎中运行的示例包含在examples目录中。示例中有很多注释,重点在于过程,而不是Bevy特定的代码。如果您使用的是其他游戏引擎,示例应该仍然容易理解并有用。
实现细节
-
使用
Project::new()
来加载所有数据,包括任何外部层级数据。如果您想在启动时加载所有数据,并且不想担心层级数据是否在单独的文件中,请使用此方法。 -
如果您想一次加载一个层级,请参阅
examples/single_level.rs
。基本上,您将在加载每个层级时调用Project::load_project()
,然后调用Level::new()
。 -
JSON反序列化由serde处理,该serde使用从LDtk JSON模式自动生成的Rust代码。一般来说,此代码与LDtk的文档相匹配,只是JSON中首选的驼峰命名法名称被改为Rust中首选的蛇形命名法名称。JSON类型String、Int和Float变为Rust类型String、i64和f64。
-
允许null值的字段被包裹在Rust的
Option<T>
中。
其他选项
-
ldtk-rs自动从指定的JSON模式生成整个crate。
-
LDtk项目为多种语言发布了QuickType加载器。这些是自动生成的,因此可能需要一些调整。上次我测试Rust版本时,我需要调整顶部的serde行。
-
按照以下说明嵌入JSON转换到您的游戏中(移除任何依赖项),并查看
lib.rs
文件。
使用旧版或新版的LDtk
LDtk包括一个JSON模式,可以使用它来自动生成RUST代码以反序列化JSON。
要使用此库与旧版(或新版)的LDtk Schema一起使用
- 克隆此项目
- 检查/src子目录,看是否有为要使用的版本预先生成的代码。如果有,请跳到下面第7步。如果没有,您将为要使用的版本创建一个新文件。
- 从LDtk Github复制与您版本对应的Schema文件版本,并将其粘贴到quicktype web工具中。Schema位于
docs/
目录。 - 在左侧,将“name”设置为“Project”,将“Source type”设置为“JSON Schema”
- 在右侧,选择Rust语言,并将字段可见性设置为“Public”。
- 将生成的文件保存到本项目的/src子目录中
- 将文件顶部的serde导入行更改为"use serde::*;".您可以通过查看其他
.rs
版本文件来查看这一点。 - 更改
mod
和pub use
行,位于lib.rs
顶部(您已经在其中工作的同一目录中),以包含您的新文件。
您需要调整Cargo.toml文件以使用您的项目而不是此项目(或将其更改贡献回来)。
如何不使用此库
查看 lib.rs
文件,决定你是否真的希望将自动生成的代码包含在这个项目中,或者是否希望直接将其包含在你的项目中。随着 LDtk 接近 1.0 版本,JSON 模式正在变得更好,使用此过程也变得更加容易。要这样做
- 按照上述说明进行快速类型操作(步骤 #3-5)。
- 将生成的 Rust 代码复制并保存到你的项目中的一个文件中。
- 更改最上面的 serde 导入行(步骤 #7 上面的内容)。
- 将此文件包含到你的项目中,享受乐趣吧!你可以查看本项目中的
lib.rs
文件,了解它是如何被包含和使用的。
依赖关系
~0.7–1.4MB
~33K SLoC