#ldtk #json #gamedev #level-design

ldtk_map

一个用于在游戏中读取ldtk地图的crate

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 数据结构

MIT许可证

29KB
581 代码行

ldtk_map

maintenance-status codecov

一个crate,用于将LDtk v1.3.4地图读取到更易于用户使用的(具有偏见地读取)数据结构中,以便在游戏中使用。

这个crate是用来做什么的?

LDtk地图包含大量开发者可能不需要使用的数据。这个crate实现了LDtk地图的struct,但通过DesignMap进行了抽象。DesignMap只包含少量数据,但这是我构建游戏时发现必要的。因此,这个crate的目标是在处理这些文件时提供一个简单的接口。它应该是一个适合初学者在Rust中制作游戏的优秀crate。然而,这个crate并不是试图给你访问LDtk文件上每个字段的权限。幸运的是,一些其他优秀的开发者也创建了可能更适合你用例的crate

ldtk 注意:注意许可证

ldtk_rust

ldtk2

添加到您的项目中

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

  1. 只使用一个世界,并将自由形式的关卡放置在世界上。
  2. “地面”层必须在项目中始终定义,因为它用于每个关卡以获取以下值: widthheightgrid_sizetileset_name
  3. 实体必须放置在“实体”层上。
  4. 值可以放置在“值”层上。
  5. 提到的所有层都必须在每个关卡中。

贡献和问题

每个人都非常欢迎提交功能请求和错误修复。我将尽可能地频繁地检查这些内容,并尝试相应地处理它们。

依赖项

~0.7–1.6MB
~35K SLoC