对于我游戏中的关卡编辑器,我有一个Floodfill功能。地图的大小为3600个图块(60 x 60),我从我的Floodfill函数中得到了一个堆栈溢出错误(因为它自称)。
如果我只填充较小的半径,它可以正常工作。如何阻止错误发生?
或者,有没有办法告诉flash运行时清除堆栈,因为不需要返回函数?
答案 0 :(得分:2)
你需要制作一个不依赖于递归的泛洪填充函数,因为Flash的堆栈非常有限。您可以在维基百科上找到一些非递归方式:http://en.wikipedia.org/wiki/Flood_fill#Alternative_implementations
答案 1 :(得分:1)
我猜你可能正在使用洪水填充的简单递归实现;该算法可以创建深堆栈。您可以实现一种更有效的基于队列的算法并保存堆栈,但我建议使用BitmapData
对象的已内置泛洪填充功能。
BitmapData
由Flash Player提供,具有非常快速且堆栈友好的泛洪填充实现。
我正在使用泛洪填充算法,最后使用内置API主要是因为速度优势 - 以及它编译的C代码与ActionScript。
以下是文档: