Reanim 动画文件详解
本文需要一定数学基础 本文相关项目: https://github.com/mcxufly/neopvzhelper 前言 Reanim 动画文件是由 Adobe Flash 动画导出的,所以其实可以找到原版游戏的.fla动画文件(我确实找到了)然后使用 Adobe Animate 软件打开然后做编辑等操作。但是 Adobe Animate 是一个商业软件而且是 Windows 软件,同时.fla动画文件标准目前为止也尚未公开,而我使用的操作系统是 Arch Linux,所以我决定不使用 Adobe Animate 软件在 Godot 中使用原版游戏提取的Reanim 动画文件数据重置原版游戏的动画。 提取原版 Reanim 动画文件 使用任意原版游戏 PAK 文件解包工具解包main.pak文件,compiled/reanim目录下是压缩过的reanim.compiled文件,需要解压缩,可以使用工具转换,如 PopStudio。 reanim.compiled文件 根据 PopStudio 项目的 YFTYLib/Reanim/PC.cs,reanim.compiled文件有 32 位文件头DEADFED4(-559022380),后 32 位int有符号整形树为原二进制数据字节数,后为 ZLib 压缩数据标志头9C78,后为压缩数据,解压后获得原二进制数据流。reanim 数据具体解析参见 LoadFromCompiled,在此不做过多赘述。 Reanim 动画数据 解压解析后的 Reanim 动画数据具有以下结构(以 JSON 格式为例) { "fps": 12, "tracks": [ // track { "name": "track_name", "transforms": [ // transform { "f": -1, "i": "IMAGE_", "a": 1, "x": 0, "y": 0, "sx": 1, "sy": 1, "kx": 0, "ky": 0, "font": "FONT", "text": "TEXT" }, ... ] }, ... ] } fps: 不用多说是动画帧率 tracks: 轨道列表 track: 轨道 name: 轨道名称,anim 开头为控制轨道,其他为普通轨道 transforms: 帧数据/变换数据列表 transform: 帧数据/变换数据 f: 帧类型,-1 为空白帧,0为关键帧 i: 显示的图片 a: 透明度 x, y: XY 坐标,原点位于左上角 sx, sy: XY 缩放 kx, ky: XY 旋转 font: 字体 text: 文字 需要注意的是,如果某一帧的某一参数和上一帧的一样那么就不会重复存储相同的数据。例如: ...