2 个不稳定版本

使用旧的 Rust 2015

0.3.0 2019年8月18日
0.2.1 2019年7月13日

747游戏开发

Download history 14/week @ 2024-03-11 19/week @ 2024-03-18 25/week @ 2024-03-25 66/week @ 2024-04-01 13/week @ 2024-04-08 15/week @ 2024-04-15 17/week @ 2024-04-22 10/week @ 2024-04-29 9/week @ 2024-05-06 21/week @ 2024-05-13 16/week @ 2024-05-20 18/week @ 2024-05-27 10/week @ 2024-06-03 14/week @ 2024-06-10 13/week @ 2024-06-17 15/week @ 2024-06-24

53 每月下载量
用于 5 个包 (3 个直接使用)

MIT/Apache

36KB
922

Sheep 🐑

Build Status Crates.io

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 目录中。

实现自己的 PackerFormat

Sheep 通过允许您选择用于打包精灵和编码元数据的实现来实现其模块化。目前提供了两种常见的打包算法(SimplePackerMaxrectsPacker,请参阅 打包器),以及 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