#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. можете ли вы попробовать отключить пересылку, чтобы узнать, не в этом ли проблема?