Flutter插件boomsheets的使用_boomsheets是一种人类可读的动画文件格式,适用于所有游戏开发者

Flutter插件boomsheets的使用_boomsheets是一种人类可读的动画文件格式,适用于所有游戏开发者

Boomsheets 是一种人类可读的动画文件格式,适用于所有游戏开发者。

提示

如果你希望使用你的动画文档与 Flutter 的 Flame 引擎一起工作,推荐使用包 Boomflame,该包使用此库并实现所有必要的逻辑以开始使你的动画栩栩如生!

Boomsheets 解决的问题

大多数程序员使用多张图片来表示单独的帧。这种方法既不高效,也不利于GPU处理。

其他人使用一个精灵表,其中所有的帧都是相同的宽度和高度。当某些动画序列中包含较大的帧时,这就会成为一个问题,并迫使其他帧变得贪婪并浪费空间。

Boomsheets 编辑器 通过 赋能 游戏开发者选择在精灵表中的切片并使用嵌入到文档中的偏移量重新定位帧来解决这些问题。访问 Steam 页面 获取更多信息。

注意

生成的文档可以无需工具即可使用。由于规范的简单性,它们甚至可以通过手写创建!

关键字

Boomsheets 使用 YES 脚本标准 来定义关键字,允许任何人仅使用文本编辑器就可以阅读、编写和使用动画文档。

全局元素

全局元素用于作为元信息,如果存在,则应用于整个文档。

  • <code>image_path</code> - 可以用来查找相关的图像图集。
  • <code>frame_rate</code> - 可以用来转换关键帧持续时间,默认为 60Hz。

动画关键字

  • <code>anim</code> - 表示一个动画状态,需要一个字符串 <code>state</code>
  • <code>keyframe</code> - 表示动画中的一个帧。
  • <code>point</code> - 表示帧中的一个自定义点。

注意

在帧中定义一个点会隐式地定义该动画中所有帧的新点。因此,如果你正在生成自己的文档,请确保每个帧都有相同数量和名称的点!

自定义元数据的使用

用于解析 Boomsheets 动画文档的基础规范允许用户向上述三个关键字中的任何一个提供额外的元数据。规范中的元数据称为“属性”,以 <code>@</code> 符号开头,并且必须出现在它们影响的动画关键字之前。它们也可以堆叠,以便可以将多个属性应用于一个元素!

重要

属性本身不会做任何事情!这是程序员的责任去读取属性键值并对它们采取行动。

动画上的元数据

# 在此动画期间每帧都放置一个击打框以伤害敌人
@hitbox x=0, y=-10, w=100, h=100
anim JUMP_SPIN_ATTACK
frame ...
frame ...
frame ...

关键帧上的元数据

# 当脚接触地面时播放声音
anim WALK
frame ...
@play_sound "footsteps.wav" once
frame ...
frame ...

点上的元数据

# 在此动画期间 HAND 节点按 0.0-1.0 百分比发光
anim AIM
frame ...
@glow 0.1
point HAND ...
frame ...
@glow 0.5
point HAND ...
frame ...
@glow 1.0
point HAND ...

开始使用

读取任何动画文档的入口类是 <code>DocumentReader</code>。此类提供了两个静态方法:一个从文件读取,另一个从单个带换行符的 <code>String</code> 读取文档的内容。

这两个操作都是 <code>async</code> 的,并将返回一个包含已解析动画状态、关键帧数据和点的 <code>Document</code>。它们可以立即使用。

void main() async {
  Document doc = await DocumentReader.fromFile(
    File.fromUri(
      Uri.parse("examples/test.anim"),
    ),
  );

  // 遍历文档中的每一项 (String key, Anim value)
  for (final MapEntry(:key, :value) in doc.states.entries) {
    // 动画也可以有属性元数据
    for (final attr in value.attrs) {
      print(attr);
    }
    print("state=$key");
    // 打印每个关键帧及其属性(如果有)
    for (final keyframe in value.keyframes) {
      for (final attr in keyframe.attrs) {
        print(attr);
      }
      print(keyframe);
    }
  }
}

更多关于Flutter插件boomsheets的使用_boomsheets是一种人类可读的动画文件格式,适用于所有游戏开发者的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部