#ldtk #gamedev #map-editor

ldtk_rust

使用LDtk 2D关卡编辑器在Rust中构建游戏

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 游戏开发

Download history 66/week @ 2024-03-11 43/week @ 2024-03-18 33/week @ 2024-03-25 90/week @ 2024-04-01 37/week @ 2024-04-08 52/week @ 2024-04-15 40/week @ 2024-04-22 26/week @ 2024-04-29 26/week @ 2024-05-06 30/week @ 2024-05-13 45/week @ 2024-05-20 37/week @ 2024-05-27 77/week @ 2024-06-03 38/week @ 2024-06-10 63/week @ 2024-06-17 31/week @ 2024-06-24

214 每月下载量
2 crates 中使用

MIT 许可证

2MB
6K SLoC

LDtk Rust库

Crates.io Docs.rs

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一起使用

  1. 克隆此项目
  2. 检查/src子目录,看是否有为要使用的版本预先生成的代码。如果有,请跳到下面第7步。如果没有,您将为要使用的版本创建一个新文件。
  3. LDtk Github复制与您版本对应的Schema文件版本,并将其粘贴到quicktype web工具中。Schema位于docs/目录。
  4. 在左侧,将“name”设置为“Project”,将“Source type”设置为“JSON Schema”
  5. 在右侧,选择Rust语言,并将字段可见性设置为“Public”。
  6. 将生成的文件保存到本项目的/src子目录中
  7. 将文件顶部的serde导入行更改为"use serde::*;".您可以通过查看其他.rs版本文件来查看这一点。
  8. 更改modpub use行,位于lib.rs顶部(您已经在其中工作的同一目录中),以包含您的新文件。

您需要调整Cargo.toml文件以使用您的项目而不是此项目(或将其更改贡献回来)。

如何不使用此库

查看 lib.rs 文件,决定你是否真的希望将自动生成的代码包含在这个项目中,或者是否希望直接将其包含在你的项目中。随着 LDtk 接近 1.0 版本,JSON 模式正在变得更好,使用此过程也变得更加容易。要这样做

  1. 按照上述说明进行快速类型操作(步骤 #3-5)。
  2. 将生成的 Rust 代码复制并保存到你的项目中的一个文件中。
  3. 更改最上面的 serde 导入行(步骤 #7 上面的内容)。
  4. 将此文件包含到你的项目中,享受乐趣吧!你可以查看本项目中的 lib.rs 文件,了解它是如何被包含和使用的。

依赖关系

~0.7–1.4MB
~33K SLoC