工作有些年头了,我们都一直为自己的生活而努力着,没有过多的时间将工作以及生活书写一下,记录下来,还好最近终于闲了下来才有时间写写东西,今天我们来谈谈,一款游戏如何从头到脚后跟的设计。这里不排除我借用一些他人,我认为较为好的设计理念。希望对你们有所帮助。
一个游戏框架的开始是什么?
我认为是一个较为清晰的文件结构,如:你的启动文件,配置文件,逻辑文件,模块文件,游戏主体文件,游戏子体文件,等等都应该如何调理清晰的安置它们
对于开发过cocos-lua项目的同学一定对其目录结构并不陌生
Game/
├─── .settings/ vscode编辑器配置文件
├─── .vscode/ vscode lua插件debug配置
├─── frameworks/ cocos2dx框架目录
├─── res/ 游戏资源目录
├─── src/ 游戏脚本目录
├─── runtime/ 游戏调试运行时目录
├─── .gitignore git忽略文件配置
├─── Game.code-workspace vscode工程文件
├─── LICENSE 开源许可文件
└─── README.md 说明文档
我们需要如何构架自己的游戏结构呢?
首先认为我们要有一个自己游戏的专属目录,如Game,这里面可以封装游戏所涉及的所有内容
有了Game目录后我们就应该思考,如何让游戏启动起来,好了这里就有一个问题。cocos启动流程是什么?
原cocos-lua项目的启动流程:
1.初始化C++部分代码
2.绑定cocos中的接口道lua虚拟机中以供lua使用
3.使用lua虚拟机engine->executeScriptFile("main.lua")
现在我们要将其设计成这样的启动流程:
1. 初始化cocos2dx C++部分
2. 绑定cocos2dx到lua虚拟机
3. 使用zip解压方式加载启动包文件,形如这样 ZipAsset::unzip(FileUtils::getInstance()->fullPathForFilename("boot.zip").c_str(),FileUtils::getInstance()->getWritablePath().c_str(),NULL,true),当然你也可以使用pack包的形式进行这样的处理,效果其实是一样的。(后续将会解释如何得到zip或者pack,以及使用方法)
4. 使用lua虚拟机调用zip中的boot.lua
文件启动
虚拟机调用lua文件前,我们执行了加载boot.zip
包文件操作,并且我们执行的是boot.lua
文件,其实这里的boot和原项目中的mian功能其实是一样的,只不过我们将它定义为启动包这样更为贴切一些,由于我们讲启动部分单独做了一个启动包,所以随后我们就可以加载自己的游戏主体包了,这里我感觉定义为main才比较好,所以main.lua
会在其他包文件中(比如main.zip
主体包),执行main.lua
的部分我们放在boot.lua
的最后好了。
启动包要做些什么事情和好处?
主要作用当然是启动游戏
,让整个cocos引擎能够与lua虚拟机进行连接工作,从而让整个进程启动。
那我们把游戏启动部分单独分包有什么好处呢:
1. 启动游戏我们都知道需要启动时间,那么这个时间就必然出现黑屏的现象,所以避免有些游戏一上来就有很多的资源加载是很有必要的,毕竟玩家才是上帝,所以有了启动包boot.zip就能一定程度上的解决此类问题,当然有的同学会说,那不还有解压时间吗?当然不可否认启动时间是有的解压时间也是有的,但是这个时间一般是感觉不出加载时间。你总不能又让马儿跑又不给马儿草吧!
2. 启动包不单单是启动游戏
,还可以包含游戏配置模块
(读取游戏本地和远程配置)、游戏日志模块
(初始化日志等)、游戏更新模块
、游戏解压模块、游戏下载模块、游戏网络模块等。启动模块一般可以是通用的,而且和你的游戏是无关的。把整个游戏的更新模块定义在这里,如果我们要修复网络问题,换个更新方式什么的,更新这个包就完成了。是不是简单明了了很多。
3. 有了启动包的独立,我们就可以真正意义上达到了通用的目的,当然不排除要做一些小修改,如跟换游戏地址,LOGO什么的。
所以整体下来启动的流程就是如下了:
1. 如果是Debug模式,启动simulator。
2. 初始化通用模块。
3. 读取本地和远程配置文件。
4. 检查包文件更新。
5. 如果boot包需要更新,则更新boot包并重启启动流程。
6. 更新游戏main基础包。
7. 加载游戏main基础包。
8. 执行main.lua
运行游戏主体。
(未完待续)下一期内容
好了今天就讲到这里,后面会详细地的讲一下每个部分的具体实现。有什么疑问,也可以向我提问,我们一起探讨。留下我的个人博客以供大家学习使用:http://taoqy666.com