Cocos2d-js模块化开发的解决方案

现在的模块化开发在前端来说非常热门,cocos2d-js对于开发HTML5游戏的前端来说,cocos2d-js由于是采用JavaScript脚本,而JS的语法层次缺乏模块化编程支持,在使用cocos2d-js引擎开发中大型游戏项目需要的是一种更有效,更简单的方法进行模块化编程,而不仅仅是让project.json中的jsList中配置的js文件一个一个按顺序执行。如能学习同门语言的node.js的molule机制,构造一个模块开发环境,可在一定程度上解决上面的问题,提高开发效率。
解决方案分为两步:

  1. Cocos2d-js Module 进行模块化编程;
  2. 用Grunt/Gulp/Webpack等对引擎进行模块打包。

这样做有什么好处?利用node.js的工作流,能大大加速cocos2d-js的开发调试速度。cocos2d-js在HTML5游戏方面工具链相比Erget是有先天性不足,我们暂不讨论,先来看看以上这两步具体是怎么做的:

  1. 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

    这三个函数实现了基础的模块化开发功能:

  2. load:在Module中一般要求一个文件就是一个模块,load函数作为一个文件的整体(即一个JavaScript文件调用一次load函数),load函数保证模块被保存在第二个参数func中,避免污染全局的命名空间,同时要求第一个参数name和该文件所处的路径相同。在其他编程语言中和load函数功能类似的语法并不存在,倒是有点类似于在Lua中调用require加载模块时,被加载的文件中的return函数的功能;
  3. include: 类似于C++的include、C#的using、Lua的require等,作用是载入一个模块,该模块名称需要和文件路径对应;
  4. dumpModuleInfo:显示当前所有已经加载过的模块,便于调试。