1. 程式人生 > 其它 >Cocos 遊戲中 JavaScript 指令碼模組化簡述

Cocos 遊戲中 JavaScript 指令碼模組化簡述

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 定義的區域性變數,將無法被模組外部訪問。但可以匯出整個模組,也可以匯出單個物件或方法。只有匯出後,才可以使用其匯出的物件或方法。