К сожалению, это невозможно: как только элементы нарисованы, вы можете изменить только полную форму, но не сам рисунок.
Чтобы дать вам больше объяснений, я погуглил о том, как Flash на самом деле вычисляет экранные объекты.К сожалению, я не смог найти ничего конкретного.
Но я нашел достаточно, чтобы сделать обоснованное предположение: [РЕДАКТИРОВАТЬ]: Я нашел очень интересный PDF-документ по Анатомия Flash .Это объясняет дерево рендеринга и то, как графические объекты обрабатываются внутри.
Я точно знаю, что все анимации формы, созданные в IDE, скомпилированы в последовательности форм (каждый кадр сохраняется как отдельное изображение),И это имеет смысл сделать так: каждый новый кадр фильма должен быть рассчитан, все векторные изображения добавляются в дерево, каждое из которых отображается в виде растровых изображений, объединяется и рисуется как одна конечная битовая плоскость для отображения.Поэтому логично делать все возможные расчеты во время компиляции, а не во время выполнения.
С другой стороны, растровое изображение будет хранить 32 бита информации о цвете для каждого отдельного пикселя, в то время как векторы сохраняются в простых значениях, сохраняя координаты x и y, стиль линии, стиль заливки и т. Д. Некоторые векторы можно сгруппировать., так что для более сложных форм стили линий и заливки должны быть сохранены только один раз, а для остальных необходимы только координаты.Кроме того, примитивные формы, такие как круги и прямоугольники, требуют меньше информации, чем объекты, объединенные из множества отдельных точек и линий.
[РЕДАКТИРОВАТЬ]: вышеупомянутый PDF говорит это:
И DisplayObjects AS3 и AS3 преобразованы в SObjects внутренне.Объекты SO имеют связанный символ.Основанный на типе символов, он имеет различные методы рисования, но все это возобновляется для рисования заливок с разными источниками цветов.
Потребуется очень, очень сложная векторная форма, чтобы требовать больше отдельных частей информации.чем его растровое представление, при условии, что он больше, чем несколько пикселей по ширине и высоте.Следовательно, для сохранения простых форм в виде векторных представлений требуется значительно меньше памяти, чем для хранения полных растровых изображений - и поэтому логично не выполнять фигуру рендеринг также во время компиляции (за исключением сложных фигур - затем «cacheAsBitmap»)собственность вступает в игру).
Подумайте, что я сказал о векторах, стиле линий, стиле заливки и т. Д. - это очень похоже на последовательность команд, которые мы должны написать при рисовании в ActionScript, верно?Я бы предположил, что эти команды просто конвертируются 1: 1 в тот тип векторных представлений, о которых я говорил.Это сделает компилятор быстрее, двоичные файлы будут меньше, а обработка форм IDE и AS будет абсолютно одинаковой.
[РЕДАКТИРОВАТЬ]: Оказывается, я был не совсем прав:
Edge & Colors
- LSObjects tree isпройден и создается список ребер
- Края имеют связанные цвета
- Штрихи преобразуются в ребра
- Цвета являются источниками данных отображения, например.Растровые изображения, видео, сплошные заливки, градиенты
- Растрирование
- Края сортируются, и цвет рассчитывается для каждого пикселя - пиксели касаются только один раз
- Презентация
- После того, как основной растеризатор завершил рисование, буфер памяти копируется на экран
Теперь представьте всеиз этих векторов были свободно редактируемыми: Последовательность команд больше не будет окончательной! Что если вы добавите, переместите или удалите одну во время выполнения?Например: наличие прямоугольника внутри заполненного прямоугольника вычитает внутреннюю форму из внешней формы.Что если вы переместили одну из угловых точек наружу?Результат будет совершенно другой формы!Или если вы добавили одно очко?Вы не можете больше хранить фигуру в виде прямоугольника, требуя, чтобы 5-ти точечные элементы рисовали то же, что когда-то было одним прямоугольным элементом.Вкратце: все группировки и оптимизация памяти больше не будут работать.И это также значительно замедлит графику во время выполнения.Вот почему разрешено добавлять новые элементы в фигуру, но не изменять их после их отрисовки.И почему вы должны очистить и перерисовать графику, если вы хотите, чтобы существующие фигуры изменились.
[РЕДАКТИРОВАТЬ]: Вы всегда можете делать сложные вещи, выполняя вычисления самостоятельно.Я по-прежнему считаю, что было правильным решением не интегрировать их в базовые графические функции.