现在的模块化开发在前端来说非常热门,cocos2d-js对于开发HTML5游戏的前端来说,cocos2d-js由于是采用JavaScript脚本,而JS的语法层次缺乏模块化编程支持,在使用cocos2d-js引擎开发中大型游戏项目需要的是一种更有效,更简单的方法进行模块化编程,而不仅仅是让project.json中的jsList中配置的js文件一个一个按顺序执行。如能学习同门语言的node.js的molule机制,构造一个模块开发环境,可在一定程度上解决上面的问题,提高开发效率。
解决方案分为两步:
- Cocos2d-js Module 进行模块化编程;
- 用Grunt/Gulp/Webpack等对引擎进行模块打包。
这样做有什么好处?利用node.js的工作流,能大大加速cocos2d-js的开发调试速度。cocos2d-js在HTML5游戏方面工具链相比Erget是有先天性不足,我们暂不讨论,先来看看以上这两步具体是怎么做的:
Cocos2d-js Module解决方案:Module可以让项目如C++的#include、Lua的require等语法那样加载其他文件/模块的内容;
具体三个模块分别如下:- load(name,func)
name
参数:模块的名字;func
参数:回调函数1
2
3
4
5
6// Example
load("GameScene", function(){
var GameScene = cc.Scene.extend({});
return GameScene; // return the module
})- include(name)
获取一个模块,
name
是该模块的名字1
2// Example
var GameScene = include("GameScene")- dumpModuleInfo()
打印日志,显示当前所有已经加载过的模块
1
2// Example
dumpModuleInfo(); // print the GameScene module这三个函数实现了基础的模块化开发功能:
- load:在Module中一般要求一个文件就是一个模块,load函数作为一个文件的整体(即一个JavaScript文件调用一次load函数),load函数保证模块被保存在第二个参数func中,避免污染全局的命名空间,同时要求第一个参数name和该文件所处的路径相同。在其他编程语言中和load函数功能类似的语法并不存在,倒是有点类似于在Lua中调用require加载模块时,被加载的文件中的return函数的功能;
- include: 类似于C++的include、C#的using、Lua的require等,作用是载入一个模块,该模块名称需要和文件路径对应;
- dumpModuleInfo:显示当前所有已经加载过的模块,便于调试。