2

私の質問を公開させてください: 私はメイン スクリプトを持っています。ユーザーのアクションに応じて、多くの JavaScript ファイルの 1 つをロードする「ゲーム」オブジェクトのインスタンスを作成するとしましょう。それらを「レベル」と呼びましょう。 D これらのファイルにはさまざまなオブジェクトが含まれています。たとえば、level1 のオブジェクトを含む「level1.js」、次に「level2.js」などです。

level1.js などのレベル スクリプトがロードされるたびに、「game」のインスタンスがオブジェクト level1 のインスタンスを作成し、それをローカル変数に格納します。

私が見つけた唯一の方法は、すべての「レベル」スクリプトの最後に、常に同じ名前を持ち、現在のレベルの定義を指すグローバル変数を記述することです。その後、ゲーム中にレベル スクリプトが読み込まれると、このグローバル変数を使用して現在のレベルのインスタンスを作成します。グローバル変数を使わずにそれを行う方法があるかどうか知りたいです。

簡単な例を次に示します。

game.js で:

function Game() {
    var levelCurrent = null;
    var scriptCour = document.createElement("script");

    scriptCur.type = "text/javascript";
    scriptCur.onload = function() {
         levelCurrent = new level();
    }
}

そして、各「レベル」スクリプト (level1.js、level2.js) で:

function level1() {
    //definition of the level
    //...
}
level = level1;

または、同様に:

level = function() {
    //definition of the level
    //...
}

私の質問を十分に説明したかどうかわかりませんが、誰かが答えを持っていれば... ありがとう!game のインスタンスは自己実行関数を使用して作成されるため、次のようなローカル変数であることに注意してください。

(function() {
    var game = new Game();
})();

ありがとうございました!

4

2 に答える 2

1

新しいレベルをグローバル変数に割り当てる代わりに、レベル情報を使用してグローバル関数を呼び出す必要があります。

window.addLevel(function level1() {
    //definition of the level
    //...
});

ゲームインスタンスがローカル変数なのに、アクセスできないのはなぜですか?シングルトン(1つのインスタンスのみ)だと思うので、グローバル変数として持つことは完全に有効です。その場合、これはaddLevel関数(window.game.addLevel())の適切な名前空間になります。

于 2012-06-04T15:41:12.697 に答える
0

メインのゲームコードで「startNewLevel」などの単一のグローバル関数を公開し、グローバル変数を宣言する代わりに、新しいレベルでその関数に自分自身を渡すことができます。

于 2012-06-04T15:36:45.560 に答える