代码之家  ›  专栏  ›  技术社区  ›  Matt

flash:对于运行缓慢的循环

  •  5
  • Matt  · 技术社区  · 16 年前

    我有一个关于flash中循环的问题…

    在一个平铺游戏中,我正在制作一个有整个水平面的迷你地图。它呈现地图的方式是一个函数,在另一个for循环中有一个for循环。它循环遍历每个平铺位置,并附加一个地图块(基本上是3x3像素的正方形),该地图块根据平铺的颜色进行着色。不管怎么说,我的问题是,当级别变大,像50x50瓷砖,地图重新绘制需要永远(最多3秒)。有什么办法解决这个问题吗?或者有其他方法做一个迷你地图吗??如果水位越来越高,可能需要10秒!

    感谢您的帮助!

    谢谢, 马特

    4 回复  |  直到 16 年前
        1
  •  3
  •   shaun pauley    16 年前

    flash渲染瓷砖的速度不是很快。它很擅长在缓冲区中存储不改变的图形,并快速显示这个缓冲区。作为子级添加到阶段中的每个图形对象(或精灵)都必须独立渲染。

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

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

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

    希望这有帮助。如果你找到一个好的解决方案,请张贴!

        2
  •  1
  •   Mat    16 年前

    对。循环本身根本不需要很长时间。但在每次迭代中,我都会从库中附加一个movieclip。顺便说一下,这不是在enterframe上做的,只是当用户按下pause(空格)时。

        3
  •  1
  •   Antti    16 年前

    很可能是你的循环太慢了。计算0-2500是非常快的,但是如果你在每次迭代中都要做大量的计算,那么它就会加起来。当然,没有看到代码,我们不能帮助你。 虽然你可以做一些技巧来让同一个循环运行顺畅(比如在多个帧上运行),但是如果它是一个3秒的循环,那么你可以做很多事情来优化它,甚至可以达到足够平滑的程度,这样就不会造成太长的HUKUP。

        4
  •  0
  •   Adam Davis    16 年前

    循环本身应该不会花很长时间运行,但是,确切地说,您在每个循环中都在做什么?附加和着色地图的操作是什么?

    -亚当