Bevy-Flash 插件介绍

Bevy-Flash 是一个为 Bevy 游戏引擎设计的轻量级动画插件,为游戏引擎引入flash动画渲染支持。通过引入该插件并对原始的swf进行相应调整后可直接导入到游戏引擎中使用。为复刻(复用)flash动画资源提供了集成现代游戏引擎的新方式,大大flash动画资源的处理问题,完全能够抛弃序列帧动画,畅快使用flash原生动画,并且是矢量的,同时也支持主要的滤镜效果渲染,较为还原flash原生效果,并在此基础上扩展了新的控制API,使得其更加方便使用,同时提供了皮肤切换功能、帧事件、以及完成事件功能!

Github

地址

🎯 核心特性

🔥 原生swf渲染

  • 动画控制
    彻底抛弃原生得控制方式,提供更加简单易用的API。
  • 切换皮肤
    识别皮肤Clip,提供简单易用的方式切换皮肤。
  • 帧事件及完成事件 提供事件回调功能。

关于

[作者] 傲娇小琳琳, 演示视频参见bilibili

[文档] Furau

2.1 快速集成指南

在国内网络中,安装调试如此巨大的rust的依赖并不是一个容易的事情,这里我们使用的是本地离线插件配置方案 来进行插件的安装、运行、调试

包体下载

下载Rust官方包体 https://www.rust-lang.org/zh-CN/

镜像配置

在 Powershell 中执行加速命令:

$ENV:RUSTUP_DIST_SERVER='https://mirrors.ustc.edu.cn/rust-static'
$ENV:RUSTUP_UPDATE_ROOT='https://mirrors.ustc.edu.cn/rust-static/rustup'

Rust测试

在命令行中执行下面的命令查看对应的Rust版本(效果请查看image-demo1)

rustc -V

image-demo 1:

20250411-130925.png

代码拉取

请访问https://github.com/aojiaoxiaolinlin/bevy_flash/releases

拉取0.15版本的插件项目

路径设计与修改

拉取Ruffle项目 和我们的插件放置到同一个目录 目录结构关系如下:

project/
├── bevy_flash-main/
│   ├── xxx.xxx
│   └── xxx.xxx
├──  ruffle/
│   └── xxx.xxx

最终依赖配置表

[package]
name = "bevy_flash"
version = "0.1.0"
edition = "2021"
authors = ["傲娇小霖霖"]
license = "MIT OR Apache-2.0"
description = "A Bevy plugin for Flash Animation"

[dependencies]
swf = { path = "../ruffle/swf"}
ruffle_render = { path = "../ruffle/render" }
ruffle_render_wgpu = { path = "../ruffle/render/wgpu" }
ruffle_macros = { path = "../ruffle/core/macros" }
swf_macro = { path = "./swf_macro" }
smallvec = { version = "1.13.2", features = ["union"] }
wgpu = { version = "23", default-features = false }

bevy = { version = "0.15", default-features = false, features = [
    "bevy_asset",
    "bevy_sprite",
] }

thiserror = "1.0"
anyhow = "1.0"
bitflags = "2.5"
lyon_tessellation = "1.0"
indexmap = "2.7"
copyless = "0.1.5"

uuid = "1.10"
enum-map = "2.7.3"

[dev-dependencies]
bevy = { version = "0.15" }


[profile.dev]
opt-level = 1

主要修改的部分是

swf = { path = "../ruffle/swf"}
ruffle_render = { path = "../ruffle/render" }
ruffle_render_wgpu = { path = "../ruffle/render/wgpu" }
ruffle_macros = { path = "../ruffle/core/macros" }
swf_macro = { path = "./swf_macro" }

项目运行demo

cargo run --example sample

image_demo_2

Snipaste_2025-04-11_13-35-58.png

2.2 示例swf下载

调试技巧

1.如何修改测试swf

在Vscode中,可以通过检索对应的参数值修改读取的内容

swf_movie: assert_server.load("frames.swf")
swf_movie: assert_server.load("131381-idle.swf")

2.如何调试指定的分支

以最新分支为例,比如 我们需要调试 blend_render_dev 分支,就可以点击拉取分支 然后配置如下的目录结构

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2025/4/14     13:17                bevy
d-----         2025/4/14     13:21                bevy_flash
d-----         2025/4/14     13:19                swf_animation

执行案例代码:

cargo run --example sample

性能分析

常见问题

Vscode 插件推荐配置单

Snipaste_2025-04-11_13-16-07.png

图片查看模糊

在浏览器中按住Ctrl + 滚轮把页面放大一些即可

Blocking waiting for file lock on package cache 卡顿

删除锁定的文件即可 请在powershell 执行

# 删除用户级锁文件
Remove-Item -Path "$env:USERPROFILE\.cargo\.package-cache" -Force

# 若使用全局安装,删除系统级锁文件(谨慎操作!)
Remove-Item -Path "C:\Program Files\Rust\.cargo\.package-cache" -Force```

术语对照表

关键帧 (Keyframe)

定义动画转折点的帧

帧率 (FPS)

FPS是图像领域中的定义,是指画面每秒帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。

SWF

SWF 是 ShockWave Flash 的缩写,是 Adobe Flash(原 Macromedia Flash)生成的一种多媒体文件格式,主要用于矢量图形、动画、音频和交互式内容的存储与播放。在本插件中是主要的兼容格式。

Fd工具

JPEXS Free Flash Decompiler(原名 FFDec)免费开源的 Flash(SWF)反编译工具 可以很方便的设计和编辑swf文件 这里可以查看和使用这个工具