点击上方<font color=blue>亿元程序员</font>+关注和<font color=orange>★</font>星标
引言
大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。
最近公司的项目需要从白鹭引擎移植到Cocos,你还真别说,开发和迭代了几年的祖传项目,还真不容易...
1.为什么要移植到Cocos
虽说白鹭引擎目前还是能够正常开发和迭代游戏,但是由于引擎已经破产了不再有人维护,避免以后出现问题没办法解决和处理,还是决定要走这一步,简单说下为什么要移植到Cocos:
- 1.性能优化:Cocos引擎在性能方面有一定的优势,特别是在移动游戏开发方面。如果白鹭引擎的性能无法满足项目的需求,那么转向 Cocos 引擎可以提供更好的性能。
- 2.生态系统和社区:Cocos引擎拥有庞大的社区和生态系统,提供了大量的插件、工具和文档,以帮助开发者更轻松地开发游戏。这可以加速开发过程,并提供更多的支持。
- 3.支持Typescript:Cocos引擎同样支持Typescript,大部分逻辑代码可以不用做太大的改动即可移植。因此团队成员从Egret转Cocos也相对容易些。
- 4.目前国内主流引擎:越来越多的游戏厂商加入到Cocos的阵营中去,越来越多成功的商业游戏验证了Cocos的实力。
所以白鹭引擎转Cocos势在必行。
2.移植计划
虽然项目从白鹭转Cocos已是势在必行、板上钉钉,还是要做好移植计划,理想化的流程如下:
- 1.熟悉Cocos引擎:开发团队之前没有使用过Cocos引擎,需要熟悉Cocos引擎。通过阅读文档,学习如何创建项目、导入资源、构建场景、拼接UI等等。
- 2.引擎和Api差异:Egret和Cocos引擎使用不同的渲染技术和架构,需要修改游戏项目框架的底层调用,包括场景管理、资源加载、动画、音频等等方面。
- 3.资源移植:将所有图片、音频、配置资源移植到Cocos项目。
- 4.重新拼UI:使用Cocos引擎的UI工具或自定义UI代码来重新创建游戏的界面。
- 5.工具移植:尝试通过工具去转换UI,把大部分代码做简单处理转换成能在Cocos引擎的代码。
- 6.人工调整:不能通过工具去完成的一系列内容,需要人为介入去手动调整和优化。
但是理想很丰满,现实却很骨感。
3.移植遇到的问题
往往计划总是赶不上变化,遇到了许许多多的坑:
1.UI移植:
在将白鹭引擎项目的皮肤移植到Cocos引擎时,处理状态变化可能会耗费大量时间。简单状态变化相对容易,但当涉及到复杂状态时,情况变得更复杂,因为这些状态可能包含不同的组件、布局和UI属性。此外,在分析后,您可能会发现一些属性在白鹭引擎中无效,但在Cocos引擎中有效。
解决这个问题的方法是逐一比较带有状态标识的组件属性。对于多重约束的组件,首先需要分析是否这些约束都会在Cocos引擎中生效,然后进行相应的修改以适应Cocos引擎的要求。这需要仔细的审查和调整,以确保皮肤在Cocos引擎中正确运作。
2.锚点问题:
在Cocos引擎中,布局组件仅会自动设置子节点的相应方向坐标位置,而不提供白鹭引擎中的居中或左对齐等对齐方式。例如,水平布局只会设置x坐标,垂直布局只会设置y坐标。
解决这个问题的方法是,确保子节点的锚点与布局组件的锚点保持一致。您可以使用锚点来代替白鹭引擎中的对齐功能。对于另一个方向的坐标(不受布局组件控制的方向),将其统一设置为0,以确保子节点在布局中正确对齐。这种方式可以更好地控制子节点的位置和对齐方式,从而在Cocos引擎中实现所需的布局效果。
3.部分接口缺少或者不同:
在移植过程中,发现部分模块使用了白鹭引擎特有的功能接口,而这些功能在Cocos引擎上并不支持。
为解决这个问题,目前的解决方案是将这些功能接口留空,不进行具体实现。计划在以后的时间里逐一研究这些功能接口的功能和需求,并根据Cocos引擎的特性来进行相应的实现。这意味着需要在后续的开发过程中逐渐填充这些空接口,以确保项目在Cocos引擎下正常运行。
4.代码耦合严重:
开发和迭代了几年的祖传项目,在代码方面耦合非常严重,移植一个小系统,可能牵扯到许许多多的其他系统,而且经过的这么多团队的迭代,代码基本上是别人写下的,不熟悉无法准确判断,导致移植报错非常多,无从下手修改。只能转向重构或者重写。
怎么解决游戏开发中系统和功能之间的严重耦合问题?
4.解耦
18年前,QQ空间面世,立即在整个互联网上掀起风潮,成为许多人的青春记忆。如今,经过18年的时间,QQ空间依然充满活力,仍然是许多年轻用户首选的社交平台。
然而,作为互联网老将之一,QQ空间的编程代码早已过时,运行环境复杂,维护成本高企,整体架构急需进行一次全面的升级。
18年的代码,QQ空间的代码了已达150万,而且经手的人和团队非常多,导致现在没有做好代码隔离,各团队的代码耦合在一起,各写各的。同时由于缺乏编程范式,同一个类中的代码风格迥异。破窗效应发生,污染开始扩散。从而导致许多bug难以修改,团队不得不进行重构。
解决开发中系统和功能之间的严重耦合问题是一个重要的设计目标,它有助于提高代码的可维护性、可扩展性和可重用性。以下是一些方法和最佳实践来解决这一问题:
- 使用模块化和组件化设计:
将游戏的功能划分为模块和组件,每个模块负责特定的任务。这有助于将功能划分清晰,并减少不同部分之间的耦合。- 使用消息传递:
引入消息传递机制,如观察者模式或发布-订阅模式,以解耦不同系统之间的通信。这允许系统在不直接依赖于彼此的情况下进行通信。- 实施接口和抽象类:
使用接口和抽象类定义功能的契约,使各个系统可以遵循这些契约,而无需直接访问其他系统的内部实现。- 分层架构:
使用分层架构,如MVC(Model-View-Controller)或ECS(Entity-Component-System),以将游戏的不同方面隔离开来,从而降低耦合。- 代码评审:
进行定期的代码评审,让团队成员检查彼此的代码以确保它们符合最佳实践,且没有不必要的耦合。
- 遵循设计模式:
使用常见的设计模式,如单一职责原则(Single Responsibility Principle)和依赖反转原则(Dependency Inversion Principle)来确保系统的组件和功能之间有明确定义的接口。
通过采取这些方法,你可以降低游戏中系统和功能之间的耦合度,使代码更容易管理和扩展,同时提高团队的协作效率。
结语
在哪里可以看到如此清晰的思路,快跟上我的节奏!关注我,和我一起学习设计模式,让糟糕的代码在潜移默化中升华。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《贪吃蛇掌机经典》《填色之旅》《重力迷宫球》大家可以自行点击搜索体验。
实不相瞒,想要个赞和在看!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
点击下方<font color=green>绿色按钮</font>+关注
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。