0

私はモジュールパターンの概念にまったく慣れていません。HTML5 ゲームのコア機能を実装することができましたが、そのゲームのすべての機能で特定の変数を使用できるようにする良い方法がわかりません。

より明確にするための短い疑似例を次に示します。

var Game = {};

Game.player = (function() {

    //...

    return {
        update : update,
        draw : draw        
    };
});

Game.main = (function() {

    var player = new Game.player();

    // needed by player
    var gravity = 1.0,
        loop,
        canvas,
        ctx,
        key_inputs;

    //...

    return {
        init : init,
        pause : pause,
        play : play        
    };
});

var game = new Game.main();
game.init();
​
4

2 に答える 2

1

で getter および setter メソッドを提供できますGame.main。のインスタンスをコンストラクターに渡す必要がありGame.mainますGame.player。次にGame.player、 のインスタンスで getter/setter メソッドを使用して、Game.mainこれらの変数にアクセスできます。

アーキテクチャが健全であること、共有する必要があるものだけを共有することを確認してください。

于 2012-09-24T17:34:07.827 に答える
1

関数をスコープとするコードPlayerで、関数で宣言されたいくつかの変数を使用する必要がある場合はGame、次の 3 つのオプションがあります。

  • それらをより高いスコープに移動します(この場合はグローバルになるため、お勧めしません)
  • それらをパラメーターとしてプレーヤーに渡します(Playerで変更されても で更新されないため、あまり良くありませんGame
  • 変数の現在の状態を関数に返すgetter関数を作成します。GamePlayer

Gameまた、 のインスタンスをに渡す必要があります。これにより、データの取得元をPlayer認識できます。Game

これが#3の例です(私が試すもの):

Game.main = (function() {
    var player = new Game.player(this);

    // needed by player
    var gravity = 1.0,
        loop,
        canvas,
        key_inputs;

    var getSettings = function () {
        return {
            gravity: gravity,
            loop: loop,
            canvas: canvas,
            key_inputs: key_inputs
        };
    };

    return {
        init : init,
        pause : pause,
        play : play,
        getSettings: getSettings        
    };
});
于 2012-09-24T17:36:23.980 に答える