我可以在phaser游戏更新循环中声明多少个函数?

时间:2015-04-16 15:11:52

标签: phaser-framework

我可以在Phaser游戏更新循环中声明的功能数量有限制吗?如果更新循环中有很多函数,性能是否会降低?

1 个答案:

答案 0 :(得分:2)

声明和调用函数

declaring a function

之间存在差异
function foo(n) {
    return n + 1;
}

并调用函数:

var bar = foo(3);

如果你的意思是声明,你确实可以在update中声明函数,因为JavaScript支持嵌套和闭包:

function update() {
    function updateSomeThings() {
        ...
    }
    function updateSomeOtherThings() {
        ....
    }
}

这对性能影响可以忽略不计,因为此代码段实际上并不调用任何这些函数。如果稍后在update中你打电话给他们:

        updateSomeThings();
        updateSomeOtherThings();

然后是有成本。

注意:您无需在update 中声明函数来调用它们!您可以调用声明的函数其他地方,只要他们是in scope。如果这太混乱,那么值得查看JavaScript指南。

函数调用的成本

您调用的每个函数都需要时间来执行。它所花费的时间取决于函数的复杂程度(它做了多少工作),它可能会调用其他需要时间执行的函数。这可能是显而易见的,但函数的总执行时间是该函数中所有代码的执行时间的总和,包括它调用的任何函数所花费的时间(以及它们调用的函数等等)。

帧率

默认情况下,Phaser的目标是每秒运行60个,这对游戏来说非常标准。这意味着它将尝试每秒更新和绘制您的游戏60次。除了每次调用你的update功能之外,Phaser还做其他事情,其中​​最重要的是吸引你的游戏,但它还有其他内务处理功能。根据游戏的不同,您的大部分帧时间可能最终会被更新或绘图占用。

你当然希望花费不到1/60秒(大约16毫秒)来完成你的更新,并且假设Phaser绘制的游戏速度非常快。

你在Phaser做的一些事情比其他事情要慢。一些开发人员已经做了足够长的时间来估计什么“太慢”才能工作,但是许多2D游戏都会很好,而不必过于关注优化(使得内存在使用的内存或时间方面更有效)。

好主意和坏主意

一些不好的想法:如果你在屏幕上有50,000个精灵(虽然有些机器非常强大,特别是当Phaser设置为使用WebGL时),即使你从未更新它们,它们往往需要很长时间才能绘制。如果你有10,000个精灵互相弹跳并相互碰撞,碰撞检测通常需要很长时间才能更新,即使某些机器可以能够正确地绘制它们。

最好的建议是尽你所能,但不要做任何事情。开始时尽量使您的设计尽可能简单。通过有趣的游戏机制增加复杂性,而不是通过计算昂贵的逻辑。

如果所有其他方法都失败了,有时您可以将工作拆分为多个更新,或者可能有一些事情可以执行每个其他更新或每个 n 更新(如果您可以执行不同的工作,则效果最佳做其他更新,所以你不只是比其他更新慢一些。)