2 个不稳定版本

0.2.0 2022年6月24日
0.1.0 2021年9月10日

#1967解析器实现

每月 38 次下载

MIT/Apache

150KB
3.5K SLoC

MIT/Apache 2.0 Licensed Rust

BMFont 字体描述符解析库。

操作、导入和导出文本、二进制、XML 格式以及更多的 BMFont 描述符文件。

概述

这个 crate 提供了构建、操作、导入和导出 BMFont 描述符文件的功能。

核心数据对象是 Font 结构。这个结构包含了 BMFont 描述符文件中所有的数据。当与相关的纹理位图文件配对时,我们就有渲染指定字体所需的所有信息。

由于存在众多的图形后端和用法需求,这个 crate 不尝试提供通用的渲染解决方案。

这个 crate 不包含不安全代码。除非通过编译器选项指定,否则它不引入任何外部依赖。

基本用法

模块是围绕核心 BMFont 文件格式组织的

  • text : 文本格式
  • binary : 二进制格式
  • xml : XML 格式,需要: --features xml

每个模块都提供了一些导入 from_... 和导出: to_... 函数。

使用方法

  1. 选择您想要工作的 BMFont 格式。
  2. 根据您要处理的数据结构选择合适的从/到方法。

示例:导入 BMFont 文本格式文件。

use std::io;
use std::io::prelude::*;
use std::fs;

fn main() -> bmfont_rs::Result<()> {
    let mut buf = fs::read("font.fnt")?;
    let font = bmfont_rs::text::from_bytes(&buf)?;
    println!("{:?}", font);
    Ok(())
}

示例:导出 BMFont 文本格式文件。

use std::io;
use std::io::prelude::*;
use std::fs::File;

fn main() -> bmfont_rs::Result<()> {
    let font = bmfont_rs::Font::default();
    let mut writer = File::create("font.fnt")?;
    bmfont_rs::text::to_writer(&mut writer, &font)?;
    Ok(())
}

高级用法 - 损坏的文件

不幸的是,存在一些 BMFont 工具会输出损坏的文件。它们可能没有遵守 BMFont 标准或者包含其他错误。当尝试加载这些文件时,bmfont_rs 将会发出描述问题的错误。

我们可以使用 LoadSettings 结构来绕过或忽略一些这些问题。只需使用所需的选项构建 LoadSettings 实例,并将其传递给加载函数的 ext 形式。

如果您遇到一个似乎与其他工具兼容但与 bmfont_rs 不兼容的 BMFont 文件,请打开一个工单。可能在 bmfont_rs 的未来版本中添加正确的行为开关。

示例:导入具有不正确字符计数的 BMFont 文本文件。

use std::io;
use std::io::prelude::*;
use std::fs;

fn main() -> bmfont_rs::Result<()> {
    let src = fs::read_to_string("font.txt")?;
    let settings = bmfont_rs::LoadSettings::default().ignore_counts();
    let font = bmfont_rs::text::from_str_ext(&src, &settings)?;
    println!("{:?}", font);
}

示例:渲染

Alt text

以上文本是用 render.rs 示例生成的。

如果您不确定如何使用 BMFont 描述符进行渲染输出,这个示例值得研究。替换您自己的图形后端不应太难。

由于图形后端和用法要求的多样性,这个crate没有尝试提供通用的渲染解决方案。

从项目根目录执行

cargo run --example render FILE

其中 FILE 是输出图像目标(png 或 jpg)扩展名

cargo run --example render ~/Desktop/lorem.png

示例:文本格式

BMFont 文本格式文件非常普遍,可读性强,易于修改。然而,并非所有工具都遵循正确的参数类型或约束,这可能导致不兼容。

从项目根目录执行

cargo run --example text

示例:二进制

BMFont 二进制文件紧凑、明确且解析效率高。然而,工具支持可能有限,且不可读。

从项目根目录执行

cargo run --example binary

示例:XML

XML 功能是受限制的:--features xml。激活后,将引入额外的依赖以辅助 XML 处理。

从项目根目录执行

cargo run --example xml --features xml

示例:JSON

JSON 最初不支持。然而,由于我们支持 Serde,我们可以轻松地使用 Serde JSON 来组合支持。

默认情况下,我们的 Serde 序列化器将布尔类型映射到 JSON 布尔类型:truefalse。然而,至少有一个 JSON BMFont 解析器期望整数布尔类型:10。为了方便后者,我们可以传递 --features serde_boolint,它将布尔值转换为整数,反之亦然。

从项目根目录执行

cargo run --example json --features serde`
cargo run --example json --features "serde, serde_boolint"`

BMFont

BMFont 主页是 这里。网站包括详细的 文档、BMFont 本身和源代码。

我绝非与 www.angelcode.com 或 BMFont 有任何关联。所有商标均属于其各自的所有者。

许可证

根据以下之一获得许可

由您选择。

依赖项

~225KB