我对模块模式的概念很陌生。我设法实现了我的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();
答案 0 :(得分:1)
您可以在Game.main
中提供getter和setter方法。您应该将Game.main
的实例传递给Game.player
构造函数。然后Game.player
可以在其Game.main
实例上使用getter / setter方法来访问这些变量。
确保您的架构合理,并且只分享您需要共享的内容。
答案 1 :(得分: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
};
});