Cocos 遊戲中 JavaScript 指令碼模組化簡述
阿新 • • 發佈:2022-03-15
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 定義的區域性變數,將無法被模組外部訪問。但可以匯出整個模組,也可以匯出單個物件或方法。只有匯出後,才可以使用其匯出的物件或方法。