2

让我公开我的问题:我有一个主脚本,假设它创建了一个“游戏”对象的实例,根据用户的操作,它会加载许多 javascript 文件之一,我们称它们为“级别”: D 这些文件包含不同的对象,例如,“level1.js”包含 level1 的对象,然后是“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
    //...
}

我不知道我是否解释得足够好我的问题,但如果有人有答案......谢谢!请注意,游戏实例是使用自执行函数创建的,因此是一个局部变量,例如:

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

谢谢!

4

2 回答 2

1

而不是将新级别分配给全局变量,您应该使用级别信息调用全局函数,例如

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

为什么你的 Game 实例是局部变量,不能访问?我猜它是一个单例(只有一个实例),所以将它作为一个全局变量是完全有效的。那么它将是 addLevel 函数 ( window.game.addLevel()) 的一个很好的命名空间。

于 2012-06-04T15:41:12.697 回答
0

您可以让主游戏代码公开一个全局函数,例如“startNewLevel”或其他东西,然后您无需声明全局变量,只需将新关卡本身传递给该函数即可。

于 2012-06-04T15:36:45.560 回答