Stackoverflow由洪水填充引起的错误:如何阻止错误?

时间:2011-11-16 05:16:52

标签: actionscript-3 stack-overflow

对于我游戏中的关卡编辑器,我有一个Floodfill功能。地图的大小为3600个图块(60 x 60),我从我的Floodfill函数中得到了一个堆栈溢出错误(因为它自称)。

如果我只填充较小的半径,它可以正常工作。如何阻止错误发生?

或者,有没有办法告诉flash运行时清除堆栈,因为不需要返回函数?

2 个答案:

答案 0 :(得分:2)

你需要制作一个不依赖于递归的泛洪填充函数,因为Flash的堆栈非常有限。您可以在维基百科上找到一些非递归方式:http://en.wikipedia.org/wiki/Flood_fill#Alternative_implementations

答案 1 :(得分:1)

我猜你可能正在使用洪水填充的简单递归实现;该算法可以创建堆栈。您可以实现一种更有效的基于队列的算法并保存堆栈,但我建议使用BitmapData对象的已内置泛洪填充功能。

BitmapData由Flash Player提供,具有非常快速且堆栈友好的泛洪填充实现。

我正在使用泛洪填充算法,最后使用内置API主要是因为速度优势 - 以及它编译的C代码与ActionScript。

以下是文档:

flash.display.BitmapData floodFill()