StackOverflow Ошибки, вызванные заливкой: как остановить ошибку? - PullRequest
0 голосов
/ 16 ноября 2011

Для моего редактора уровней в моей игре у меня есть функция заливки.Карта имеет размер 3600 плиток (60 на 60), и я получаю ошибку переполнения стека из своей функции заливки (как она сама себя вызывает).

Если я заливаю только меньший радиус, она работает нормально.Как остановить возникновение ошибки?

В качестве альтернативы, есть ли способ сообщить среде выполнения флэш-памяти для очистки стека, поскольку нет необходимости возвращаться к функции?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Вам нужно создать функцию заливки, которая не полагается на рекурсию, потому что стек Flash довольно ограничен. Вы можете найти некоторые нерекурсивные способы в Википедии: http://en.wikipedia.org/wiki/Flood_fill#Alternative_implementations

1 голос
/ 16 ноября 2011

Полагаю, вы могли бы использовать простую рекурсивную реализацию заливки; этот алгоритм может создавать стеки deep . Возможно, вы могли бы реализовать один из более эффективных алгоритмов на основе очередей и сохранить стек, однако я бы предложил использовать уже встроенные возможности заливки заливки объекта BitmapData.

BitmapData предоставляется Flash Player и имеет довольно быструю и дружественную к стеку реализацию заливки.

Некоторое время назад я играл с алгоритмами заливки и в конечном итоге использовал встроенные API, главным образом из-за преимущества в скорости, а также скомпилированного кода C против ActionScript.

Вот документы:

flash.display.BitmapData floodFill ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...