flash:for循环运行缓慢

时间:2020-03-06 14:57:44  来源:igfitidea点击:

我有一个关于Flash循环的问题。

在方块游戏中,我正在制作一张具有整个关卡的迷你地图。它呈现地图的方式是在另一个for循环中带有for循环的函数。它会在每个图块位置之间循环,并添加一个图块(基本上是3x3像素的正方形),该图块根据图块的颜色进行着色。无论如何,我的问题是,当关卡变得像50x50瓦片一样大时,地图重做将永远花费(最多3秒)。有没有什么办法解决这一问题?还是有另一种制作迷你地图的方式?如果水平变得更大,可能需要10秒钟!

任何帮助表示赞赏!

谢谢,
马特

解决方案

循环本身不需要花很长时间,但是,确切地说,我们在每个循环中都在做什么?对地图片断进行添加和着色的操作是什么?

-亚当

Flash不能很快地渲染图块。这非常适合在缓冲区中存储不变的图形并快速快速显示该缓冲区。作为子级添加到舞台的每个图形对象(或者精灵)都必须独立呈现。

问题是Flash必须每帧绘制50x50 = 2500个图块!即使它们为3x3像素,闪光灯仍会将它们视为单独的对象。

如果我们可以将所有内容存储在一个缓冲区或者一个对象中并显示它,那就太好了。因此,请尝试在同一对象而不是多个对象中绘制这些3x3拼贴。但是,这可能会妨碍功能,因为整个对象将必须在每个帧中重新渲染。

其他一些建议可能是在网格中的较大单元格中渲染对象。从10x10开始,而不是50x50,然后在每个单元格中绘制5x5单元格。这可能会加快速度。

希望这可以帮助。如果我们找到一个好的解决方案,请发布!

是的。循环本身不会花费很长时间。但是在每次迭代中,我都会从库中添加一个movieClip。顺便说一下,它只是在用户按下Pause(空格)时才在enterFrame上执行。

很有可能是循环很慢(如此处所述)。计数0-2500确实非常快,但是如果我们在每次迭代中都进行大量计算,那么它将相加。当然,如果没有看到代码,我们将无法为我们提供帮助。
虽然我们可以尝试使同一个循环更流畅地运行(例如在多个帧上运行),但是如果它是3秒的循环,则可能有很多方法可以优化它,甚至可以使其平滑地运行,因此不会导致太长的启动。