5

我有一个关于闪存循环的问题......

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

任何帮助表示赞赏!

谢谢,马特

4

4 回答 4

3

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

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

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

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

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

于 2008-10-01T06:01:48.273 回答
1

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

于 2008-10-01T14:32:20.950 回答
1

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

于 2008-10-01T18:54:03.567 回答
0

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

-亚当

于 2008-10-01T05:46:24.613 回答