持续创作,加快生长!这是我参与「日新方案 6 月更文挑战」的第 25 天,点击检查活动详情


前语

这是一套 张风捷特烈 出品的 Flutter&Flame 系列教程,发布于社区。假如你在其他平台看到本文,能够依据关于链接移步到中检查。因为文章可能会更新、批改,一切以文章版别为准。本系列源码于 【toly_game】 ,假如本系列对你有所帮助,希望点赞支撑,本系列文章一览:

  • 【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 中的小游戏,是十分必要的。

【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 。下一篇就来从源码的视点去剖析一下其间的具体实现。信任从中能够学到许多知识,那本文就到这儿,明天见 ~

  • @张风捷特烈 2022.06.20 未允禁转
  • 我的 大众号: 编程之王
  • 我的 主页 : 张风捷特烈
  • 我的 B站主页 : 张风捷特烈
  • 我的 github 主页 : toly1994328

\