我对flash中的循环有疑问....
在平铺游戏中,我正在制作一个整个关卡的迷你地图。它渲染地图的方式是在另一个for循环中使用for循环的函数。它循环通过每个图块位置并附加一个地图块(基本上是一个3x3像素的正方形),根据图块的颜色进行着色。无论如何,我的问题是,当水平变得像50x50瓷砖一样大时,地图的渲染需要永远(最多3秒)。有没有什么办法解决这一问题?或者还有另一种做迷你地图的方法吗?如果等级越来越大,可能需要10秒钟!
感谢任何帮助!
谢谢, 马特
答案 0 :(得分:3)
Flash无法快速渲染切片。它非常适合存储不会在缓冲区中更改的图形并快速快速显示此缓冲区。作为子项添加到舞台的每个图形对象(或精灵)都必须独立渲染。
你的问题是闪光灯必须每帧画50x50 = 2500个瓷砖!即使它们是3x3像素,闪光灯仍将它们视为单独的物体。
如果您可以将所有内容存储在缓冲区或一个对象中并显示它,那就太好了。因此,尝试在同一个对象中绘制这些3x3图块而不是多个对象。但是,这可能会妨碍您的功能,因为每个帧都必须重新渲染整个对象。
其他一些建议可能是在网格中的较大单元格中渲染对象。而不是50x50,从10x10开始,然后在每个单元格中绘制5x5个单元格。这可能会加快速度。
希望这会有所帮助。如果您找到一个好的解决方案,请发布!
答案 1 :(得分:1)
是。循环本身并不需要很长时间。但是在每次迭代中我都会从库中附加一个movieClip。顺便说一下,当用户按下Pause(空格)时,它不会在enterFrame上执行此操作。
答案 2 :(得分:1)
最有可能的是(如此处所述)你的循环很慢。计数0-2500非常快,但如果你在每次迭代中进行大量计算,它会加起来。当然,如果没有看到代码,我们无法帮助您解决这个问题。 虽然你可以做一些技巧让同样的循环运行更平滑(例如在多个帧上运行),但如果它是一个3秒循环,那么你可以做很多事情来优化它 - 甚至可以达到足够平稳运行的程度,所以它不会导致太长的罢工。
答案 3 :(得分:0)
循环本身不应该花很长时间才能运行,但是你在每个循环中做了什么呢?附加和着色地图块的操作有哪些?
- 亚当