Cocos 游戏中 JavaScript 脚本模块化简述

  • A+
所属分类:Web前端
摘要

Cocos Creator 中的 JavaScript 使用和 Node.js 几乎相同的 CommonJS 标准来实现模块化,

Cocos Creator 中的 JavaScript 使用和 Node.js 几乎相同的 CommonJS 标准来实现模块化,

简单来说:

  • cocos 中 cc.Class 定义的每一个单独的 JavaScript 脚本文件就构成一个模块。
  • cocos 中普通 JavaScript 脚本文件需要添加 module.exports 主动导出成模块。

模块化的特性:

  • 每个模块都是一个单独的作用域,互不干扰。
  • 当前模块如果想使用其它模块代码需要以 require 方法来引用。

如下是针对2种不同情况下,模块化的示例代码:

1. cocos 中 cc.Class 定义 JavaScript 模板文件

例如 test.js,格式如下:

// test.js cc.Class({     extends: cc.Component,      properties: {          speed: 10,      },      update: function () {}  });

现在要在别的脚本里访问它,可以在别的脚本里: 

//先require引用该js模块,然后使用其定义的属性和方法。 var test = require("test"); cc.log("speed is", test.speed);

这样便能正确输出:"speed is 10"。

注意:

  • require 可以在脚本的任何地方任意时刻进行调用。
  • 游戏开始时会自动 require 所有脚本,这时每个模块内部定义的代码就会被执行一次,之后无论又被require几次,返回的始终是同一份实例。

2. 普通 JavaScript 代码的模块化处理。

例如 test.js,格式如下:

// test.js var test = {     speed: 10,     load: function () {         // ...     } }; module.exports = test

现在要在别的脚本里访问它,可以在别的脚本里:

//先require引用该js模块,然后使用其定义的属性和方法。 var test = require("test"); cc.log("speed is", test.speed);

这样便能正确输出:"speed is 10"。

注意:

  • 当你的 module.exports 没有任何定义时,如果脚本里有定义了 cc.Class,则自动把 exports 设为定义的 cc.Class,否则按照 module.exports 导出的对象为准。
  • 每个脚本都是一个单独的作用域,在脚本内使用 var 定义的局部变量,将无法被模块外部访问。但可以导出整个模块,也可以导出单个对象或方法。只有导出后,才可以使用其导出的对象或方法。