Actionscript: окно странного предупреждения «Сценарий вызывает …»

#actionscript

#actionscript

Вопрос:

Сценарий в этом фильме приводит к замедлению работы Adobe Flash Player 10. и т.д…

Получение этого окна предупреждения.

Можно ли этого как-то избежать?

Может быть, где-то есть ограничение на количество операций в секунду? Может быть, мне следует создать очередь с соответствующим интервалом внутри AS3?

Почему появляется это сообщение? В зависимости от каких именно факторов?

Спасибо 😉

Обновить

Хм, кажется, где-то утечка памяти, я думаю, это из-за этого. Сборщик мусора отстой. 😀

Ответ №1:

Сборщик мусора во Flash — очень хитрый зверь. Ключ заключается в тщательной очистке всех ссылок на объект, включая любые прослушиватели событий и содержимое объекта. Я действительно вижу эту ошибку только при работе с системами частиц, где частицы не удаляются должным образом.

Эта ошибка также может появиться в IDE, вызванная сторонними расширениями, поэтому проверьте свой swf-файл в браузере, чтобы убедиться, что это ваша ошибка!

Комментарии:

1. На самом деле произошла утечка из-за ведения журнала отладки. Просто отключил его и перекомпилировал. В любом случае получаю сообщение после выполнения множества операций. Процессор не используется, и утечек памяти нет. wtf O_o

2. Может быть, где-то есть какой-то буфер, который переполняется?

3. Нет, я все перепроверил.

4. Как сказал divillysausages, выполнение тяжелой работы, такой как сравнение пикселей на большом растровом изображении, может привести к слишком большому количеству операций во фрейме. Если вы можете определить операции, которые вызывают ошибку, вы можете разделить их с помощью события enterFrame.

Ответ №2:

Это не проблема сборщика мусора. Сборка мусора, самое большее, приостановит ваш SWF-файл на небольшое время. Либо вы выполняете действие, которое занимает оооочень много времени (например, операции с пикселями на огромном изображении или что-то в этом роде, или тяжелые операции в цикле), либо вы вступили в бесконечный цикл.

Можете ли вы предоставить более подробную информацию о том, что такое SWF и что он делает?

Комментарии:

1. Я использую NetGroup и отправляю данные при нажатии клавиши с помощью метода NetGroup sendToNearrest. Когда данные игры получены, я перенаправляю их дальше, если требуется, или передаю в javascript через ExternalInterface.

2. Если я правильно понимаю: итак, в одном SWF-файле вы получаете нажатие клавиши, которое отправляет его в ближайший другой SWF-файл в группе. Если вы получаете сообщение из другого SWF-файла, то вы либо перенаправляете его дальше, либо передаете в JS? Что произойдет, если в группе есть только один SWF-файл — вы продолжаете маршрутизировать его (непрерывно) или блокируете для ответа, который не приходит? Если вы получаете сообщение и вам нужно направить его дальше, как вы узнаете, когда его следует остановить?

3. Существует логическое значение if(info.fromLocal == true) , тогда сообщение для нас. В противном случае отправьте его дальше.

4. можете ли вы попробовать отключить пересылку, чтобы узнать, не в этом ли проблема?