我一直觉得 Flutter 是写 App 的。 写页面、搞交互、连接口,没想到有一天,我居然用它做了个小游戏。
说实话,最开始只是想玩玩。那种"程序员周末突发奇想"的玩玩。 结果做着做着,发现------Flutter 做游戏,这事儿真不是玩笑。
01. Flutter?那不是写 App 的么?
是。Flutter 原本的定位确实是 UI 框架。 你写个按钮、动画、滚动页面,Flutter 都能飞快渲染,不卡。
但------重点来了。

Flutter 的底层渲染引擎叫 Skia,这是个狠角色。它是一个由 Google 开发和维护的开源 2D 图形渲染引擎。它提供了高性能的 2D 图形绘制能力,支持跨多种硬件和软件平台(如 Android、Windows、macOS、iOS、Linux 等)进行硬件加速渲染
你在屏幕上看到的每一个像素,最终都是 Skia 在"画"出来的。
而这也意味着:
只要你能画,Flutter 就能让它动起来。
所以,2D 游戏这种东西,本质上也就是不停地画。画角色、画背景、画特效。 从这个角度讲,Flutter 天然就有做游戏的潜力。
02. 那我该从哪儿开始?
我当时的第一反应是:"那我得自己写个游戏循环、算帧率、处理输入事件吧?"
后来我找到了一个库,叫 Flame。

如果你听过 Unity 的"Game Loop",那 Flame 就是给 Flutter 开的外挂版游戏循环。
它帮你管好这些烦人的东西:
- 帧循环(每秒 60 次 update/draw)
- 动画系统
- 精灵(Sprite)和碰撞检测
- 音效播放
- 资源加载
- 游戏生命周期
换句话说: 你不需要从零写引擎,直接写游戏逻辑就行。

一个最小的游戏长这样:
dart
class MyGame extends FlameGame {
@override
Future<void> onLoad() async {
final player = SpriteComponent()
..sprite = await loadSprite('player.png')
..position = Vector2(100, 200);
add(player);
}
}
一行行 Dart 代码,却能让角色在屏幕上动起来。那一刻,我是真的"被爽到"。
03. 游戏里的世界是由什么组成的?
我后来发现,Flame 提供的"世界观"挺有意思。 它不是那种庞大的 3D 场景,也没那么多复杂的系统。 它就是一堆 Component(组件)。
一个角色是 Component,敌人是 Component,子弹、背景、按钮也是。 这些组件都有自己的位置(Position)、大小(Size)、生命周期(onLoad、update、render)。
这种方式很"Flutter 化"------ 就像你在 UI 里堆 Widget,现在你在游戏里堆 Component。 想象一下,你在堆积木。每个积木自己知道该做什么,你只负责让它们协同。
而这一切,都还在 Flutter 的世界里。你要加个暂停按钮?用 Flutter 的 Button 就行。 想弹个设置页?直接 Navigator.push。 UI 层和游戏层之间,是天然融合的。
04. 物理、地图、音效?全都有库。
当我继续折腾下去时,发现 Flame 的生态还挺全。
想做物理碰撞? 用 flame_forge2d
(它其实是 Box2D 的 Dart 版) 可以加重力、关节、摩擦力,甚至做个弹球都行。
想做 RPG? 有个叫 Bonfire
的库,专门搞地图、角色、对话、AI 巡逻。
想加载 Tiled 编辑器做好的地图? 直接 flame_tiled
,三行代码加载瓦片地图。

dart
final component = await TiledComponent.load(
'my_map.tmx',
Vector2.all(32),
ignoreFlip: true,
);
音效呢? flame_audio
或 just_audio
,全支持。背景音乐、按钮声都不在话下。
说真的,这些库都挺"有感情"的。 因为大多数是社区开发者自己在做游戏时顺手提炼出来的。 它们带着实战痕迹,不花哨,但管用。
05. 那性能呢?Flutter 能撑得住游戏吗?
这是个经典问题。 我也担心过。毕竟游戏一帧掉下来,手感全没。
但 Flutter 的绘制是硬件加速的,直接用 GPU。 在移动端上,Flame 的 2D 渲染性能挺不错------ 我自己测试过,几十个 sprite 同时动,依然能稳 60fps。
当然,你别搞太花的特效、几千个粒子乱飞。 那种情况任何框架都会吃力。 Flutter 适合的是"轻中型 2D 游戏",比如:
- Flappy Bird 类的小游戏
- 回合制、塔防
- 像素 RPG
- 平台跳跃类
这些都能非常流畅。
06. 但它也有不完美的地方
比如:
- 没有可视化编辑器(不像 Unity 那种拖拖拽拽就能拼世界)
- 3D 不现实,Flame 是纯 2D 引擎
- 商业生态还小,广告、内购、中间件要自己接
- Web 平台性能偶尔会掉帧,需要优化
这些都是硬伤,但如果你只是想做出能玩、能上线的 2D 游戏,其实问题不大。
而且对熟悉 Flutter 的人来说,这门技术没有"切换成本"。 不用学 C#、不用装 Unity,直接写 Dart,打包还方便。
07. 做游戏这件事,让我重新认识了 Flutter
我以前觉得 Flutter 就是 UI 工具。 后来才发现,它其实是一个能直接"操控像素"的画布。
你可以写业务代码,也可以写游戏逻辑。 你可以画按钮,也可以画角色。 同样一套技能栈,却能延伸到另一个世界。
更妙的是------ Flutter 的 热重载(Hot Reload) 让调游戏比 Unity 都爽。 改个速度、调个颜色、换个贴图,一保存就生效。 做原型的效率高到离谱。
08. 最后的话
有人问我:"那 Flutter 做游戏算简单吗?"
我想了想。 如果你的目标是做出一个"能玩的 2D 游戏", 那它真的很简单------几乎没有门槛。
但如果你想做一个"游戏引擎级"的东西,比如 3D 战斗、实时光影、复杂骨骼动画,那就别折腾 Flutter 了。
不过,说实话------ 在现在这个时代,能快速验证想法,比什么都值钱。
而 Flutter + Flame,正好就干这件事。 它让你一周内从想法到可玩。 能跑在手机、网页、电脑上。
我挺喜欢这种"轻而快"的感觉。 有时候,不是每个程序员都要造个 Unity。 能做出一个能让人玩五分钟、笑一下的小游戏,就够了。
结语
如果你已经会 Flutter, 那不妨找个周末,去试着写一段这样的代码:
dart
class MyGame extends FlameGame { ... }
哪怕只是让一张图片上下跳动,也算是个开始。 因为你永远不知道,这个小实验, 可能是你"程序员人生"的一个新入口。