繁体   English   中英

Javascript游戏循环状态在匿名函数中

[英]Javascript game loop state in an anonymous function

我正在搞乱画布,首先阅读一堆游戏循环片段/帖子并将它们组合成最好的一个。

今天我发现了这个片段(这是一篇文章的部分内容,所以他们稍后会对它进行进一步的迭代。但是我正在整合这些想法),但这让我感到困惑。

Game.run = (
    function() {
        var loops = 0;
        var skipTicks = 1000 / Game.fps;
        var maxFrameSkip = 10;
        var nextGameTick = (new Date).getTime();

        return function {
            loops = 0;

            while ((new Date).getTime() > nextGameTick && loops < maxFrameSkip) {
                Game.update();
                nextGameTick += skipTicks;
                loops++;
            }

            Game.draw();
        };
    }
)();

Game._intervalId = setInterval(Game.run, 1000 / Game.fps);

所以Game.run被赋予外部函数的结果,这是内部函数。 但是内部函数依赖于nextGameTick ,它在外部函数中定义...

那么这个游戏会在外部匿名功能中保持其状态吗? 如果是这样,任何想法为什么他们这样做?

至于eg loops ,每次调用都设置为0,它是否在外面声明,以避免每次重新声明变量?

这种类型的构造称为立即调用的函数表达式IIFE

此模式用于管理范围。 在这种情况下,我们阻止loopsskipTicks等变量泄漏到全局范围。 更重要的是,它们在内部函数的闭包中被捕获,因此在对内部函数的调用中持续存在。 通过使用IIFE,只有我们的内部函数可以看到这种状态,并且它在全局上下文中是隐藏的。

这是关于模式的一篇不错的文章 请特别参阅有关使用闭包保存状态的部分。

是的,它会的。

local frame你返回的功能是内部local frame的Game.run功能。 因此,围绕您返回的函数在Game.run中更改的任何变量都是持久的。 只要您尝试引用nextTick变量,该函数的父框架就会在Game.run中查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM