2 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2019年8月18日 |
---|---|
0.2.1 | 2019年7月13日 |
747 在 游戏开发
53 每月下载量
用于 5 个包 (3 个直接使用)
36KB
922 行
Sheep 🐑
sheep
(Spritesheet packer) 是一个轻量级和模块化的库,用于创建精灵图。它旨在尽可能减少对 API 的使用限制,以便在资产管道中使用。
该项目处于快速开发中,API 可能会进行几次更改,直到达到稳定版本,但输入字节并接收元数据和字节向量的基本流程将保持不变。
使用方法
要使用 CLI,只需使用 cargo 安装它
cargo install sheep_cli
提供了使用提示。要查看所有选项,只需不带参数运行命令。可以使用 --options
标志将选项传递给打包器,以空格分隔的 key=value
对的形式。默认情况下,将使用 maxrects
打包器,有关更多信息,请参阅 打包器。
示例
sheep pack --options max_width=1024 max_height=1024 sprites/*.png
如果您想从源代码中使用 CLI,请简单克隆仓库并运行 cargo run -- ...
。有关如何直接使用库的示例,请参阅 simple_pack
示例,该示例位于 sheep/examples
目录中。
实现自己的 Packer
和 Format
Sheep 通过允许您选择用于打包精灵和编码元数据的实现来实现其模块化。目前提供了两种常见的打包算法(SimplePacker
和 MaxrectsPacker
,请参阅 打包器),以及 amethyst 引擎 使用的数据格式(AmethystFormat
)。未来还将有更多,但您也可以选择自己的打包算法和格式。
实现 Packer
pub struct MyPacker;
impl Packer for MyPacker {
fn pack(sprites: &[SpriteData]) -> PackerResult {
// Spritedata contains an id for the sprite to reference back
// to it, and the dimensions of the sprite.
// The expected output is the dimensions of the resulting spritesheet,
// as well as all the anchors for the sprites (i.e. their positions).
PackerResult { dimensions, anchors }
}
}
实现 Format
pub struct MyFormat;
// This is the format that will be output by encode, and you'll probably want
// to serialize later.
#[derive(Serialize)]
pub struct Foo {}
impl Format for AmethystFOrmat {
type Data = Foo;
fn encode(dimensions: (u32, u32), sprites: &[SpriteAnchor]) -> Self::Data {
// Encode the spritesheet dimensions and sprite positions into
// your chosen data format here.
Foo {}
}
}
使用您的自定义 impl
要使用自定义打包器或格式化程序,只需在调用函数时将其作为类型参数传递即可
let sprite_sheet = sheep::pack::<MyPacker>(sprites, 4);
let meta = sheep::encode::<MyFormat>(&sprite_sheet);
打包器
目前有两个实现可供选择
- MAXRECTS (推荐)
实现 maxrects 精灵打包算法。本实现参考的论文和原始实现可以在这里找到。此算法在大多数情况下应该会产生最优结果。
- 简单
一个简单的实现,它会按面积对精灵进行排序,然后将它们全部打包到一个纹理中。由于无法限制最终精灵图集的最大尺寸,因此这种方法在简单场景中可能比 maxrects 快,但可扩展性较差。
路线图
以下是 sheep
计划的功能
支持多个输出纹理(分区)智能输出纹理尺寸- 更多打包算法
MAXRECTS- 天际线
- 更多元数据格式
- 更多图像格式
许可证
sheep
在 MIT 和 Apache 许可证下双许可,请参阅 COPYING
。
依赖关系
~260–445KB