![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Новичок Сообщений: 2 Регистрация: 1.07.2006 Пользователь №: 466 ![]() |
Собственно пост!!!
|
|
|
![]() |
![]()
Сообщение
#2
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4828 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Slam_Sergo
Во флеше имеется такое ограничение - глубина рекурсии в 256 итераций. Сам с такой проблемой не сталкивался (практически не использовал во флеше рекурсии и не доводилось доходить до ограничения её глубины), но о проблеме доводилось слышать. Могу порекомендовать следующие пути: 1) Используй несколько функций (аналогичных, но с разными именами). И проверяй (счётчик) на приближение к лимиту. Если в первой функции счётчик приблизился к 256, вызывай рекурсивно не эту функцию, а уже вторую, а из неё всё начинается сначала (она сама себя вызывает рекурсивно), пока её счётчик не дойдёт до лимита, а там вызывается первая. Это поможет, если после вызова другой рекурсивной функции, флеш сбросит "свой" счётчик рекурсий, и тогда можно будет вызывать по 256 раз то одну, то другую функцию - и так сколько нужно раз. Если же флеш запоминает и никак не захочет сбрасывать счётчик рекурсий (после таких пропусков), то смотри п.2. 2) Сделать столько функций сколько нужно (по задумке) для рекурсий, каждая функция рассчитана на 256 вызовов. Как только лимит достигнут вызывается следующая. И так по цепочке. Функционал у функций идентичный, лишь имена различны и вызывается следующая функция по цепочке. -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]()
Сообщение
#3
|
|
Новичок ![]() Группа: Новичок Сообщений: 2 Регистрация: 1.07.2006 Пользователь №: 466 ![]() |
Это отлично конечно. Но насколько я понимаю, флэш считает не только вхождения в рекурсию, но и вхождения в функции вызванные из других функций. И всё-таки смысл в этом есть, спасибо за ответ, попробую поковыряюсь.
|
|
|
![]()
Сообщение
#4
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4828 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Пожалуйста.
Попробуй, всё должно получится. Как бы флеш не считал вызовы из других функций, я же описал во втором варианте решение, которое подразумевает столько функций, сколько нужно получить рукурсивных вызовов делённое на 256. Т.е. из одной рекурсивной функции в конце вызывается другая, которая уже сама работает рукурсивно и не обращается более к первой (а в конце вызывает третью функцию и т.д.). -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]()
Сообщение
#5
|
|
![]() Активный участник ![]() ![]() ![]() Группа: Пользователь Сообщений: 300 Регистрация: 23.04.2006 Из: Днепропетровск, Украина Пользователь №: 317 ![]() |
Боюсь, ничего из этого не получится. Это все по той простой причине что существует такой себе arguments.caller - ссылка на объект, вызвавший текущий. После вызова некой другой функции из данной та, другая, все равно поставится в ту же рекурсивную цепочку, так как она точно будет знать, кто ее вызвал. Попытки убить caller (присвоить значение null, к примеру) ни к чему не приводят - похоже, он обрабатывается еще до входа в тело функции =(
P.S. Vista rules =)) -------------------- прочь из моей головы |
|
|
![]()
Сообщение
#6
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1129 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Можно отредактировать тэг scriptLimits в swf-файле.
-------------------- |
|
|
![]()
Сообщение
#7
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4828 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата Можно отредактировать тэг scriptLimits в swf-файле. Верно подметил, chingachgoog - можно отредактировать свойство MaxRecursionDepth в тэге scriptLimits swf-файла для задания нужной глубины рекурсии. P.S. Отредактировать данный тэг можно лишь если он есть ![]() -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]()
Сообщение
#8
|
|
Новичок ![]() Группа: Новичок Сообщений: 2 Регистрация: 14.03.2011 Пользователь №: 10377 ![]() |
Сложновато как для моего понимания...
-------------
Причина редактирования: Реклама.
-------------------- Flashzone я тебя люблю!
|
|
|
![]()
Сообщение
#9
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1129 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Надо установить flasm (для AVM1). Там этог тэг виден.
Для лучшего понимания надо скачать из сети главу 20 из книги Гурского ActionScript 2.0. Для профессионалов. Эта глава распространяется бесплатно в виде архива с doc-файлом. -------------------- |
|
|
![]()
Сообщение
#10
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4828 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Для AVM1 можно использовать flasm, а для AVM2 - yogda. И через эти дизассемблеры можно работать с тэгом scriptLimits.
-------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13.05.2013 - 17:17 |