【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md
前言
- 【Flutter&Flame 游戏 - 壹】开启新世界的大门
- 【Flutter&Flame 游戏 - 贰】操纵杆与角色移动
- 【Flutter&Flame 游戏 - 叁】键盘事件与手势操作
- 【Flutter&Flame 游戏 - 肆】精灵图片加载方式
- 【Flutter&Flame 游戏 - 伍】Canvas 参上 | 角色的血条
- 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用
- 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动
- 【Flutter&Flame 游戏 - 捌】装弹完毕 | 角色武器发射
- 【Flutter&Flame 游戏 - 玖】探索构件 | Component 是什么
- 【Flutter&Flame 游戏 - 拾】探索构件 | Component 生命周期回调
- 【Flutter&Flame 游戏 - 拾壹】探索构件 | Component 使用细节
- 【Flutter&Flame 游戏 - 拾贰】探索构件 | 角色管理
- 【Flutter&Flame 游戏 - 拾叁】碰撞检测 | CollisionCallbacks
- 【Flutter&Flame 游戏 - 拾肆】碰撞检测 | 之前代码优化
- 【Flutter&Flame 游戏 - 拾伍】粒子系统 | ParticleSystemComponent
- 【Flutter&Flame 游戏 - 拾陆】粒子系统 | 粒子的种类
- 【Flutter&Flame 游戏 - 拾柒】构件特效 | 了解 Effect 体系
- 【Flutter&Flame 游戏 - 拾捌】构件特效 | ComponentEffect 一族
- 【Flutter&Flame 游戏 - 拾玖】构件特效 | 了解 EffectController 体系
- 【Flutter&Flame 游戏 - 贰拾】构件特效 | 其他 EffectControler
- 【Flutter&Flame 游戏 - 贰壹】视差组件 | ParallaxComponent
- 【Flutter&Flame 游戏 - 贰贰】菜单、字体和浮层
- 【Flutter&Flame 游戏 - 贰叁】 资源管理与国际化
- 【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍
- 【Flutter&Flame 游戏 - 贰伍】pinball 源码分析 - 资源加载与 Loading
- 【Flutter&Flame 游戏 - 贰陆】pinball 源码分析 - 游戏主菜单界面
- 【Flutter&Flame 游戏 - 贰柒】pinball 源码分析 - 角色选择与玩法面板
- 【Flutter&Flame 游戏 - 贰捌】pinball 源码分析 - 游戏主场景的构成
- 【Flutter&Flame 游戏 - 贰玖】pinball 源码分析 - 视口与相机
第一季完结,谢谢支持 ~
1. pinball 整体介绍
Flutter 在 I/O 2022
中开源的 pinball 游戏,无疑让大家眼前一亮,看到 Flutter
在休闲游戏中也可以发挥价值。但其中使用了 Firebase
进行用户认证,并记录成绩进行排名,这对于 I/O 2022
中的小游戏,是非常必要的。
但是,由于网络原因,克隆项目后并没有跑起来。另外 pinball
目前好像只是支持 web
,这对于学习而言并不是很友好。所我打算对 pinball
这个项目的源码进行解读,从中抽离出一些模块进行介绍,,保证代码的可运行。在其中肯定也能见识到官方大佬对于整体逻辑和结构的处理技巧,相信一定有所收获。
pinball
中的场景并不是非常复杂,在游戏开始时,是资源加载的界面,会有一个加载的进度条:
主页面如下,主要是背景和 play
的按钮,相当于一个简单的菜单,可以看出整体上是一个 伪 3D
的风格,营造一种空间感。
在点击 play
之后,会有一个选择菜单,选择地板的图片纹理。在选择相关的 icon 时,地板就会进行相应的变化。
选中之后,会出现一个 How to Play
的面板,介绍玩法,及按键的操作。这个界面将在几秒后消失:
当游戏结束时,会有一个挺好看的移动转场,用户输入名字后,显示 Replay
的菜单:
总的来看,pinball 整体玩法并不是非常复杂,很符合休闲小游戏的定位。但从代码的角度来看,还是有不少内容的,特别是主游戏场景中,有很多构件,以及弹球的碰撞、发射等。
2. 应用分包处理
pinball
作为官方的开源项目,在项目结构上的处理还是很值得借鉴的。如下所示,可以看出项目对不同模块进行了分包处理。这就可以对项目进行分层管理,本质来说,这就相当于自己在本地创建了一个三方库进行依赖。
在主项目的 pubspec.yaml
中,可以在 dependencies
依赖节点引入这些包。使用 path
属性,指定相对路径即可,如下图所示:
3. 简看各个包的作用
既然把每个模块进行分包处理,那么每个包的作用就相对比较明确。这里想要了解一个包的作用,可以从三个角度入手:外貌
、资源
、源码
。外貌就是表面上显示的信息,比如包的名称、包的描述简介,比如 authentication_repository
包,从名称上就可以看个大概,是用于处理用户认证信息的仓储。
包中的 资源
:表示这个包中有哪些文件,从中可以对其复杂程度做一个初步的认知,比如这里 authentication_repository
就一个主要文件,可见其本身并不复杂。对于不太复杂的包,可以稍微瞄一眼其中的源码实现,不一定要全懂,但至少混个眼熟。
这里认证逻辑是非常简单的,通过 FirebaseAuth
出发 signInAnonymously
方法而已。
geometry
包也比较简单,用于提供一些方法作为几何计算的辅助:
leaderboard_repository
用于提供排行榜数据,而且数据是存储在 Firebase
云端存储的。
pinball_audio
包的作用是管理游戏中的音频资源数据,可以看出 pinball
对包的划分还是非常细致的。
pinball_components
是一个非常复杂的包,其中维护着游戏中相关的各种 Component
。前面我们也知道,对于 Flame
游戏而言,最重要的就是各种维护 Component
角色之间的关系。所以这个包必定是以后研究的重点。
pinball_flame
是专门针对于该项目的一些偏僻问题的解决方案,也就是根据实际需求对 Flame
的拓展。其中 Flame
在 1.2.0
在新加入的 parent_is_a.dart
应该就是吸取了这里的经验。框架与实际应用相辅相成,互相促进发展,是个很好的现象。
pinball_theme
也比较简单,从 assets
文件夹在就可以看出,这个包的作用的对选择地板砖的主题进行设置。
pinball_ui
用于处理字体、颜色、对话框、主题等显示样式的工作:
platform_helper
中目前只有一个校验平台是否是 Android
或 iOS
的方法,没有什么其他内容。没有要太在意:
share_repository
包主要用于分享分数,维护社交平台分享文字的数据,比如 twitter
和 facebook
。
这样,对于 pinball
的整体结构我们就有了一个基本的认知。其中并不太感兴趣的是关于 Firebase
的内容,和它相关的有 authentication_repository
和 leaderboard_repository
。下一篇就来从源码的角度去分析一下其中的具体实现。相信从中可以学到很多知识,那本文就到这里,明天见 ~
\
转载自:https://juejin.cn/post/7111143892950941704