Cocos Creatorモジュール化スクリプト(公式ドキュメントより抜粋)
モジュール化スクリプト
Cocos Creatorでは、コードを複数のスクリプトファイルに分割し、相互に呼び出すことができます.これを実現するには、Cocos Creatorでモジュールを定義して使用する方法を理解する必要があります.この手順はモジュール化と略称されます.
モジュール化が何ができるか分からない場合は、モジュール化は次のようになります. C/C++の C#の JavaとPythonの HTMLの モジュール化により、Cocos Creatorで他のスクリプトファイルを参照できます.他のファイルからエクスポートされたパラメータ にアクセス他のファイルのエクスポートを呼び出す方法 他のファイルを使用してエクスポートするタイプ 他のComponent の使用または継承
Cocos CreatorのJavaScript使用とNode.jsはほぼ同じCommonJS規格でモジュール化を実現し、簡単に言えば:個々のスクリプトファイルごとにモジュール が構成される.各モジュールは、個別の役割ドメイン である.は、同期 を参照する. として設定.
もしあなたがまだよく分からないなら、大丈夫です.以下で詳しく説明します.
本明細書では、「モジュール」と「スクリプト」の2つの用語は等価である.すべてのコメントはステップアップされたもので、最初は理解する必要はありません.モジュールの定義にかかわらず、すべてのユーザーコードは最終的にCocos CreatorによってオリジナルのJavaScriptにコンパイルされ、ブラウザで直接実行できます.
リファレンスモジュール
require
Cocos Creatorが提供するインタフェースに加えて、すべてのユーザー定義モジュールは
別のスクリプトにアクセスするには、次のようにします.
requireの完全な例
次に、Rotateを使用してサブクラスを派生し、スクリプト
ここでは,Rotateから継承されたSinRotateという新しいコンポーネントを定義し,
同じコンポーネントは、
コメント: ゲームの開始時にすべてのスクリプトが自動的にrequireされ、各モジュール内で定義されたコードが1回実行されるため、その後もrequireに何度も返されても、常に同じインスタンスが返されます. デバッグの場合、Developer ToolsのConsoleでrequireプロジェクトの任意のモジュールをいつでも使用できます.
モジュールの定義
コンポーネントの定義
各個別のスクリプトファイルは、前に作成したスクリプト
スクリプトにコンポーネントを宣言すると、Cocos Creatorはデフォルトでエクスポートし、他のスクリプトは直接requireというモジュールでこのコンポーネントを使用することができます.
一般的なJavaScriptモジュールの定義
モジュールではコンポーネントを定義するだけでなく、実際には任意のJavaScriptオブジェクトをエクスポートすることができます.スクリプト
別のスクリプトで
これにより
では、なぜComponentを定義するときに
コメント:が
その他の例
変数のエクスポート
プライベート変数のカプセル化
各スクリプトは個別の役割ドメインであり、スクリプト内で
循環参照
属性遅延定義を参照してください
サードパーティモジュールリファレンス
サードパーティモジュールリファレンスドキュメントを参照してください
Cocos Creatorでは、コードを複数のスクリプトファイルに分割し、相互に呼び出すことができます.これを実現するには、Cocos Creatorでモジュールを定義して使用する方法を理解する必要があります.この手順はモジュール化と略称されます.
モジュール化が何ができるか分からない場合は、モジュール化は次のようになります.
include
using
import
Cocos CreatorのJavaScript使用とNode.jsはほぼ同じCommonJS規格でモジュール化を実現し、簡単に言えば:
require
の方法で他のモジュールmodule.exports
は、導出変数もしあなたがまだよく分からないなら、大丈夫です.以下で詳しく説明します.
本明細書では、「モジュール」と「スクリプト」の2つの用語は等価である.すべてのコメントはステップアップされたもので、最初は理解する必要はありません.モジュールの定義にかかわらず、すべてのユーザーコードは最終的にCocos CreatorによってオリジナルのJavaScriptにコンパイルされ、ブラウザで直接実行できます.
リファレンスモジュール
require
Cocos Creatorが提供するインタフェースに加えて、すべてのユーザー定義モジュールは
require
を呼び出してアクセスする必要があります.たとえば、Rotate.js
で定義されたコンポーネントがあります.// Rotate.js
cc.Class({
extends: cc.Component,
// ...
});
別のスクリプトにアクセスするには、次のようにします.
var Rotate = require("Rotate");
require
は、モジュールによってエクスポートされたオブジェクトを返します.通常、結果はすぐに変数(var Rotate
)に保存されます.require
に入力された文字列は、パスも接尾辞も含まれず、大文字と小文字が敏感なモジュールのファイル名です.requireの完全な例
次に、Rotateを使用してサブクラスを派生し、スクリプト
SinRotate.js
を新規作成できます.// SinRotate.js
var Rotate = require("Rotate");
var SinRotate = cc.Class({
extends: Rotate,
update: function (dt) {
this.rotation += this.speed * Math.sin(dt);
}
});
ここでは,Rotateから継承されたSinRotateという新しいコンポーネントを定義し,
update
メソッドを書き換えた.同じコンポーネントは、
require("SinRotate")
を使用する限り、他のスクリプトによってアクセスされてもよい.コメント:
require
は、スクリプトの任意の時点で呼び出すことができる.モジュールの定義
コンポーネントの定義
各個別のスクリプトファイルは、前に作成したスクリプト
Rotate.js
などのモジュールです.// Rotate.js
var Rotate = cc.Class({
extends: cc.Component,
properties: {
speed: 1
},
update: function () {
this.transform.rotation += this.speed;
}
});
スクリプトにコンポーネントを宣言すると、Cocos Creatorはデフォルトでエクスポートし、他のスクリプトは直接requireというモジュールでこのコンポーネントを使用することができます.
一般的なJavaScriptモジュールの定義
モジュールではコンポーネントを定義するだけでなく、実際には任意のJavaScriptオブジェクトをエクスポートすることができます.スクリプト
config.js
があると仮定// config.js
var cfg = {
moveSpeed: 10,
version: "0.15",
showTutorial: true,
load: function () {
// ...
}
};
cfg.load();
別のスクリプトで
config
オブジェクトにアクセスする場合は、次の手順に従います.// player.js
var config = require("config");
cc.log("speed is", config.moveSpeed);
cfg
がエクスポートされなかったため、「TypeError:Cannot read property'moveSpeed'of null」とエラーが表示されます.requireは実際にターゲットスクリプト内のmodule.exports
変数を取得するため、config.js
の最後のmodule.exports = config
を設定する必要があります.// config.js - v2
var cfg = {
moveSpeed: 10,
version: "0.15",
showTutorial: true,
load: function () {
// ...
}
};
cfg.load();
module.exports = cfg;
これにより
player.js
は「speed is 10」を正しく出力することができる.では、なぜComponentを定義するときに
exports
を設定しなくてもいいのでしょうか.ComponentはCocos Creatorの特殊なタイプであるため、スクリプトによってComponentが定義されているのにexports
が宣言されていない場合、Cocos Creatorはexports
を自動的にComponentに設定します.コメント:
module
に追加した他の変数は導出できない.すなわち、exports
は他の変数名に置き換えることができず、システムはexports
という変数しか読み取れない.その他の例
変数のエクスポート
module.exports
デフォルトは空のオブジェクト({}
)で、新しいフィールドを直接追加できます.// foobar.js:
module.exports.foo = function () {
cc.log("foo");
};
module.exports.bar = function () {
cc.log("bar");
};
// test.js:
var foobar = require("foobar");
foobar.foo(); // "foo"
foobar.bar(); // "bar"
module.exports
の値は、任意のJavaScriptタイプであってもよい.// foobar.js:
module.exports = {
FOO: function () {
this.type = "foo";
},
bar: "bar"
};
// test.js:
var foobar = require("foobar");
var foo = new foobar.FOO();
cc.log(foo.type); // "foo"
cc.log(foobar.bar); // "bar"
プライベート変数のカプセル化
各スクリプトは個別の役割ドメインであり、スクリプト内で
var
で定義されたローカル変数を使用すると、モジュール外部からアクセスできません.モジュール内のプライベート変数を簡単にカプセル化できます.// foobar.js:
var dirty = false;
module.exports = {
setDirty: function () {
dirty = true;
},
isDirty: function () {
return dirty;
},
};
// test1.js:
var foo = require("foobar");
cc.log(typeof foo.dirty); // "undefined"
foo.setDirty();
// test2.js:
var foo = require("foobar");
cc.log(foo.isDirty()); // true
循環参照
属性遅延定義を参照してください
サードパーティモジュールリファレンス
サードパーティモジュールリファレンスドキュメントを参照してください