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

您可以在Game.main. 您应该将 的实例传递Game.mainGame.player构造函数。然后Game.player可以在其实例上使用 getter/setter 方法Game.main来访问这些变量。

确保你的架构是健全的,并且你只分享你需要分享的东西。

于 2012-09-24T17:34:07.827 回答
1

如果作用于你的Player函数的代码需要使用在你的Game函数中声明的一些变量,你有三个选择:

  • 将它们移动到更高的范围(在这种情况下将是全局的,因此不推荐)
  • 将它们作为参数传递给播放器(不是很好,因为Player如果它们更改,它们将不会被更新Game
  • 创建一个getter函数Game,将变量的当前状态返回给Player函数。

您还需要将 的实例传递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 回答