Cocos Creator 棋牌源码模块化与热更新实践(2)

上篇文章我们主要讲了 大厅 + 子模块的游戏设计思路,这篇我们主要讲下Creator 工程物理结构

二、Creator 工程物理结构

Cocos Creator 引擎的 Assets 资源管理模型将资源分:

1、静态资源

2、动态资源

两种资源类型,在介绍工程物理结构前,我们先了解一下这两种资源的特性。

静态资源

非 assets/resources 目录下的资源都是静态资源,它有下面几个特点:

是它只能被引擎编辑器所引用,在场景切换时引擎可以帮助我们完成资源的加载和释放;

未被引擎编辑器使用的资源在构建时不会被输出。

Creator 工程物理结构

动态资源

assets/resources 目录下的资源为动态资源,特点是:

1、动态资源除了可以在引擎编辑中使用以外,还可以使用 cc.loader.loadRes 进行动态加载;

2、在场景切换时引擎不会释放内存中的动态资源;

3、在构建时,不论资源是否被编辑使用,都会被强制输出。

下面介绍三种单工程—多模块的工程物理结构,看看动态资源与静态资源对工程结构会产生什么样的影响。

2.1 动态资源型

动态资源型是在 assets/resources目录中创建模块目录,将所有图片、配置、音效、界面等都放在这里面,目的是想让代码能掌控所有资源,下图是一个简易的项目资源结构。

image

hall:大厅模块脚本、场景、图片等资源。

gameX:这里指上图中的 game1~game3,子游戏模块脚本、场景、图片等资源。

scripts:通用的脚本代码,例如可通用的组件、工具函数等。

libs:第三方代码库,例如 lodash、md5。

我们再看下在这种工程结构下,使用 SVN、Git 在多人协作上些什么差异。

2.1.1 SVN

将模块资源集中在一个目录下,使用 SVN 做版本管理,模块开发还算比较顺畅,例如当前我们正在负责开发 game1,resources 目录下只需要保留 hall 和 game1 两个目录,game2 与 game3 可以在本地把它删除,没事也不用去更新它。

为什么要这样做呢?

当子模块越来越多,代码、图片也越来越多,Cocos Creator 打开工程也越来越慢。当你修改一行代码,激活 Cocos Creator 编译需要经过十几秒甚至更长时间的等待。后来 Cocos Creator 1.7 改进了合并预览文件的问题,但在运行时却要一个文件一个文件地进行加载。当子模块增加,代码文件变多,依然逃不了这种等待煎熬。

因此在个人开发时,将不需要的模块目录直接删除,当 game1 中的一个功能完成时,进入 game1 目录提交代码和资源,这样可以保证我们开发的内容不影响到其他人,其它子模块也不会影响到我们,就算其他伙伴的代码有语法问题,暂时编译不过,也不会影响到我们当前所在的模块,导致我们不能预览调试。

2.1.2 Git

非常遗憾的是,笔者更偏爱使用 Git 做版本管理,硬是用本地 Git 来代理远程 SVN 折腾了一年多。

SVN 可以按目录为单位来更新、提交,但 Git 是按仓库单位来操作的,要更新全部一起更新、要提交整个工程目录一起提交,当做到后面子模块越来越多,如果电脑性能跟不上会是一种折磨。

虽然当时笔者所处的开发环境只能 SVN,但笔者也在考虑,如果团队使用 Git 做版本管理,如何能才能提高开发效率呢?项目越来越大,版本越来越多,没有 Git 强大的分支能力,使用 SVN 的弊端也会越来越明显。

当然,笔者遇到的问题肯定已经有人遇到过了,Git 是用来开发 Linux 操作系统的版本管理工具,当然有对应的解决方案,那就是使用 Git submodule 子模块,为游戏子模块创建独立仓库。

2.2 动静结合型

将所有资源文件放在 resources 目录,需要自己手动释放资源,似乎感有些不妥。于是笔者在新的项目尝试将资源做动静分离,尽量使用静态资源,尽可能少地使用动态资源,同时开启场景自动释放资源开关,可以降低内存的占用,请看下图:

动静结合型

在动静结合型的工程结构中,一个模块可能需要两个目录,看下图所示:

一个模块可能需要两个目录

以大厅模块为例,在 assets 根下中创建 hall 目录存放静态资源,同时在 assets/resources 下也创建一个 hall 目录存放动态资源。

这种样式的工程模块结构,利用模块场景的自动释放资源开关,在模块之间来回切换,可以轻松搞定资源释放问题,请看下图:

资源释放问题

对上图简单说明一下:

在大厅场景,模块入口界面,cc.loader 缓存资源数 275 个;

使用 cc.director.loadScene 进入子模块场景,cc.loader 缓存资源数量为 482;

退回到大厅界面,cc.loader 缓存数量 281 个。

有人会有疑问,退回到大厅 cc.loader 的资源数为什么没有回到 275 而是 281 多了 6 个,这是因为子模块界面中使用了 resource 目录中的资源,因此使用静态资源可以让我们轻松一点。

同样我们再比较一下,多人参与项目,在使用 SVN 和 Git 两种版本管理工具下有些什么不同:

2.2.1 SVN

SVN 变化不大,只需要保留大厅模块、公共库和当前需要开发的模块即可,只是在更新资源时,需要跑到两个目录中去操作稍微有点麻烦。

2.2.2 Git

一个模块两个目录,这种模块结构对于 Git 就有些不太友好了,难道为一个模块创建两个 Git 子仓库?

不是说不可以,但这样会增加项目的管理复杂度,一种方案是使用脚本或自动化工具,编写自己的版本更新、提交命令,将多个 Git 命令整合起来,这需要根据自己的项目规模做取舍了。

2.3 静态资源型

静态资源型将所有文件都放在静态资源目录,即项目中不使用 resources 文件夹,看下图:

静态资源型

025源码论坛声明 1、本网站中的绝大部分资源来源于网络, 本网站不保证所有资源的正确性和安全性,不为其合法性负责.
2、对于一切使用本网站资源而可能遭致的意外、疏忽、侵权及其造成的损失,本网站对其概不负责,亦不承担任何法律责任。
3、其他单位或个人使用、转载或引用本站原创文章时必须同时征得本025源码网的同意.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时删除并致以最深的歉意。
5、如需要本站的游戏源码或搭建帮助,可以联系站长 15623571666(微信同号)或者扫描右侧二维码!

您可能还会对下面的文章感兴趣:

    cache
    Processed in 0.003290 Second.