【问题标题】:flash: for loops running slowflash: for 循环运行缓慢
【发布时间】:2008-10-02 02:54:03
【问题描述】:

我对 Flash 中的循环有疑问......

在一个瓷砖游戏中,我正在制作一个包含整个关卡的迷你地图。它呈现地图的方式是一个在另一个 for 循环中带有一个 for 循环的函数。它循环遍历每个图块位置并附加一个地图块(基本上是一个 3x3 像素正方形),该图块根据图块的颜色进行着色。无论如何,我的问题是当关卡变得像 50x50 瓷砖一样大时,地图重新绘制需要永远(最多 3 秒)。有没有什么办法解决这一问题?或者有没有其他方法可以做小地图??如果关卡越来越大,可能需要 10 秒!

感谢任何帮助!

谢谢, 马特

【问题讨论】:

  • 你能发布代码示例吗?这是 as2 还是 as3?

标签: flash optimization loops


【解决方案1】:

Flash 渲染图块的速度不是很快。它非常适合将不改变的图形存储在缓冲区中并快速显示此缓冲区。每个作为子对象添加到舞台的图形对象(或精灵)都必须独立渲染。

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

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

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

希望这会有所帮助。如果您找到好的解决方案,请发布!

【讨论】:

    【解决方案2】:

    是的。循环本身并不需要很长时间。但在每次迭代中,我都会从库中附加一个movieClip。顺便说一句,它不是在 enterFrame 上这样做的,只是当用户按下暂停(空格)时。

    【讨论】:

      【解决方案3】:

      很可能(如此处所述)您的循环速度很慢。计数 0-2500 确实很快,但如果您在每次迭代中进行大量计算,它会加起来。当然,如果没有看到代码,我们将无法帮助您。 虽然你可以做一些技巧来让同一个循环运行得更流畅(例如在多个帧上运行它),但如果它是一个 3 秒的循环,你可能可以做很多事情来优化它——甚至可能达到它运行得足够流畅的程度,这样就不会造成太长的打嗝。

      【讨论】:

        【解决方案4】:

        循环本身运行应该不会花很长时间,但是,您在每个循环中到底在做什么呢?贴图和上色的操作有哪些?

        -亚当

        【讨论】:

        • 我同意,绘制这么多对象会很慢,但 3 秒有点过头了。
        猜你喜欢
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 2015-01-28
        • 2017-05-12
        • 1970-01-01
        • 2020-10-22
        • 2011-09-14
        相关资源
        最近更新 更多