likes
comments
collection
share

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

作者站长头像
站长
· 阅读数 36

前言

第一季完结,谢谢支持 ~


1. pinball 整体介绍

Flutter 在 I/O 2022 中开源的 pinball 游戏,无疑让大家眼前一亮,看到 Flutter 在休闲游戏中也可以发挥价值。但其中使用了 Firebase 进行用户认证,并记录成绩进行排名,这对于 I/O 2022 中的小游戏,是非常必要的。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

但是,由于网络原因,克隆项目后并没有跑起来。另外 pinball 目前好像只是支持 web ,这对于学习而言并不是很友好。所我打算对 pinball 这个项目的源码进行解读,从中抽离出一些模块进行介绍,,保证代码的可运行。在其中肯定也能见识到官方大佬对于整体逻辑和结构的处理技巧,相信一定有所收获。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball 中的场景并不是非常复杂,在游戏开始时,是资源加载的界面,会有一个加载的进度条:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


主页面如下,主要是背景和 play 的按钮,相当于一个简单的菜单,可以看出整体上是一个 伪 3D 的风格,营造一种空间感。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


在点击 play 之后,会有一个选择菜单,选择地板的图片纹理。在选择相关的 icon 时,地板就会进行相应的变化。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


选中之后,会出现一个 How to Play 的面板,介绍玩法,及按键的操作。这个界面将在几秒后消失:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


当游戏结束时,会有一个挺好看的移动转场,用户输入名字后,显示 Replay 的菜单:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

总的来看,pinball 整体玩法并不是非常复杂,很符合休闲小游戏的定位。但从代码的角度来看,还是有不少内容的,特别是主游戏场景中,有很多构件,以及弹球的碰撞、发射等。


2. 应用分包处理

pinball 作为官方的开源项目,在项目结构上的处理还是很值得借鉴的。如下所示,可以看出项目对不同模块进行了分包处理。这就可以对项目进行分层管理,本质来说,这就相当于自己在本地创建了一个三方库进行依赖。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


在主项目的 pubspec.yaml 中,可以在 dependencies 依赖节点引入这些包。使用 path 属性,指定相对路径即可,如下图所示:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


3. 简看各个包的作用

既然把每个模块进行分包处理,那么每个包的作用就相对比较明确。这里想要了解一个包的作用,可以从三个角度入手:外貌资源源码 。外貌就是表面上显示的信息,比如包的名称、包的描述简介,比如 authentication_repository 包,从名称上就可以看个大概,是用于处理用户认证信息的仓储。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

包中的 资源 :表示这个包中有哪些文件,从中可以对其复杂程度做一个初步的认知,比如这里 authentication_repository 就一个主要文件,可见其本身并不复杂。对于不太复杂的包,可以稍微瞄一眼其中的源码实现,不一定要全懂,但至少混个眼熟。 这里认证逻辑是非常简单的,通过 FirebaseAuth 出发 signInAnonymously 方法而已。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


geometry 包也比较简单,用于提供一些方法作为几何计算的辅助:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


leaderboard_repository 用于提供排行榜数据,而且数据是存储在 Firebase 云端存储的。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball_audio 包的作用是管理游戏中的音频资源数据,可以看出 pinball 对包的划分还是非常细致的。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball_components 是一个非常复杂的包,其中维护着游戏中相关的各种 Component 。前面我们也知道,对于 Flame 游戏而言,最重要的就是各种维护 Component 角色之间的关系。所以这个包必定是以后研究的重点。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball_flame 是专门针对于该项目的一些偏僻问题的解决方案,也就是根据实际需求对 Flame 的拓展。其中 Flame1.2.0 在新加入的 parent_is_a.dart 应该就是吸取了这里的经验。框架与实际应用相辅相成,互相促进发展,是个很好的现象。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball_theme 也比较简单,从 assets 文件夹在就可以看出,这个包的作用的对选择地板砖的主题进行设置。

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


pinball_ui 用于处理字体、颜色、对话框、主题等显示样式的工作:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


platform_helper 中目前只有一个校验平台是否是 AndroidiOS 的方法,没有什么其他内容。没有要太在意:

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


share_repository 包主要用于分享分数,维护社交平台分享文字的数据,比如 twitterfacebook

【Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md


这样,对于 pinball 的整体结构我们就有了一个基本的认知。其中并不太感兴趣的是关于 Firebase 的内容,和它相关的有 authentication_repositoryleaderboard_repository 。下一篇就来从源码的角度去分析一下其中的具体实现。相信从中可以学到很多知识,那本文就到这里,明天见 ~

\

转载自:https://juejin.cn/post/7111143892950941704
评论
请登录