Проблемы с позиционированием Flash-графики, нарисованной в Graphics Class
Я использую Flash CS3 для создания простого графического приложения. Когда пользователь нажимает кнопку, он выбирает определенный мувиклип. После нажатия в другом месте на сцене, создается экземпляр клипа и добавляется на сцену в позиции курсора. Я также добавил возможность кликать по добавленному клипу и перетаскивать его по экрану. И все это прекрасно работает.
Проблема в том, что я также хочу иметь возможность динамически рисовать и добавлять объекты на сцену с помощью класса Graphics. Всякий раз, когда я добавляю объекты таким образом, их координаты x и y всегда равны 0,0 независимо от того, где я размещаю их на сцене. Это делает позиционирование этой графики очень проблематичным. Я создал модифицированную функцию позиционирования специально для этой динамически прорисованной графики, и хотя она "работает", она чувствует себя менее отзывчивой, чем позиционирование для объектов мувиклипа. Я все еще пытаюсь оптимизировать эту функцию, но мне кажется, что идеальное решение для графики - иметь ненулевые координаты, когда они помещены в середину сцены, как объекты мувиклипа. Есть ли какой-нибудь "обходной путь" для достижения этого?
3 ответа
Если вы собираетесь рисовать с графическим классом внутри фрагмента ролика / спрайта, вам нужно нарисовать его в растровом изображении и отобразить растровое изображение вместо мувиклипа. Видеоклипы могут содержать только такую большую векторную информацию, и даже если вы нарисуете что-то, фигура, созданная с помощью класса Graphics, все еще остается на месте. Вы обнаружите, что если вы будете отслеживать частоту кадров с помощью чего-то вроде класса Stats мистера Дуба, когда вы начнете заполнять мувиклип, то fps будет падать. Решение состоит в том, чтобы использовать метод draw() объекта BitmapData и скопировать содержимое фрагмента ролика в отображаемое растровое изображение. Когда вы создаете растровое изображение, вам нужно связать его с BitmapData. Каждый раз, когда вы вызываете draw, он будет обновлять растровое изображение для вас (что приятно).
Я создал приложение для рисования на прошлой неделе, поэтому у меня есть опыт из первых рук с этой проблемой.
Вы можете изменить точку регистрации экранного объекта, используя класс матрицы.
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/geom/Matrix.html
Вы должны нарисовать внутри мувиклипа, а затем переместить этот мувиклип. Рисунки фактически привязаны к самому объекту, поэтому вы не можете перемещать их независимо друг от друга. Так что просто сделайте контейнер, нарисуйте его и переместите контейнер внутри другого клипа.