Skip to content

Latest commit

 

History

History
101 lines (93 loc) · 3.93 KB

README.md

File metadata and controls

101 lines (93 loc) · 3.93 KB

SWF Animation Runtime

To make better use of SWF resources

SWF 动画运行数据(JSON)

  1. 用法:

       cargo run --release --package=convert  D:\Code\Rust\swf_animation\core\tests\swfs\spirit2159src.swf
       // 或者指定放大倍数
       cargo run --release --package=convert  D:\Code\Rust\swf_animation\core\tests\swfs\spirit2159src.swf --scale 2.0

    可用第三方工具,如Texture Packer等工具打包成atlas,然后使用SpriteSheet加载。

  2. 动画文件 animation.json 的格式如下:

    {
      // 动画名称
      "name": "head",
      // 动画帧率
      "frame_rate": 30,
      // 子动画,Key为子动画ID(对一个swf文件,子动画ID是唯一的),Value为子动画数据
      "base_animations": {
        "2": {
          // 表示一个时间轴,Key为时间轴深度,深度按照从小到大渲染,即深度值越小的在底层,深度值越大的在顶层,深度值大的重叠时会遮住小的。
          "time_lines": {
            // key为深度值,frames为帧数据
            "2": [
              {
                // 资源ID,子动画或者图形资源中的一个
                "id": 1,
                // 第几帧才开始渲染
                "place_frame": 0,
                // 帧持续时间,这里持续一帧
                "duration": 1,
                // 矩阵变换,用于缩放、旋转、平移等操作。
                "matrix": {
                  "a": 5.4772186, // 缩放X
                  "b": 0.0, // 旋转倾斜0(RotateSkew0)
                  "c": 0.0, // 旋转倾斜1(RotateSkew1)
                  "d": 5.4772186, // 缩放Y
                  "tx": -203.5, // 平移X
                  "ty": -223.0 // 平移Y
                },
                // 颜色变换,用于改变颜色。
                "color_transform": {
                  "mult_color": [0.0, 0.0, 0.0, 0.0],
                  "add_color": [0.0, 0.0, 0.0, 0.0]
                },
                // 混合模式,用于控制两个图像之间的混合方式。默认为Normal。TODO: 混合模式 改为数值判断?还是枚举?
                "blend_mode": "Normal",
                // 滤镜
                "filters": []
              }
            ]
          },
          // 动画总帧数
          "total_frames": 1
        }
      },
      // 目标动画,key为动画名称,value为动画数据,这里的名称默认是`default`,因为没有在adobe animation中设置动画标签,所以默认为`default`。当设置了动画标签后,这里会根据标签名称进行分类,一个标签代表一个动画。
      "animations": {
        "default": {
          "time_lines": {
            "1": {
              "frames": [
                {
                  "id": 2,
                  "place_frame": 0,
                  "duration": 1,
                  "matrix": {
                    "a": 1.0,
                    "b": 0.0,
                    "c": 0.0,
                    "d": 1.0,
                    "tx": 608.2,
                    "ty": 534.15
                  },
                  "color_transform": {
                    "mult_color": [0.0, 0.0, 0.0, 0.0],
                    "add_color": [0.0, 0.0, 0.0, 0.0]
                  },
                  "blend_mode": "Normal"
                }
              ]
            }
          }
        },
        // 动画总帧数
        "total_frames": 1
      }
    }
  3. 注意事项(规则)

    • 只有根影片剪辑的动画才会解析为animations项下的动画,其余的影片都作为子动画。若根影片无动画则animations下不会有可播放动画。
    • 使用多动画时要保证所有需要的动画都在根影片时间轴,使用影片中的Label分割,并且Label将作为动画的名称,若根影片无任何标签将会生成默认名(名称为default)。
    • 最后,为了防止在游戏引擎中出现锚点偏移,所以将不会应用根影片的平移变换(目前未发现不良影响)。