![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
Подскажите, как реализовать эффект динамического рисования сложного контура (например, рукописные буквы) через AS3.0 (как будто кто-то пишет рукописным шрифтом и этот процесс видит пользователь). В сети куча уроков по этому эффекту, но они все построены на покадровой анимации. Нашла также возможность через прогаммирование, но на AS 2.0. (http://forum.darkdragons.ru/showthread.php?t=1017 2 пост).
Мне необходимо реализовать данный эффект в ActionScript 3.0. Логика моя была такая: есть картинка-контур (или шрифт), который мы якобы рисуем, на него должна быть наложена динамическая маска. В качестве маски используется мувик (кружочек-точка-кончик карандаша или ручки, оторая пишет), этот мувик анимированно движется по пути, который совпадает с контуром нашей картинки. Но таким образом наша маска не увеличивается по площади, открывая весь контур, а просто перемещается по нему. Поэтому вводим AS 3, с помощью которого мы добавляем сначала общий контейнер-мувик и делаем его маской для нашего рисунка. А потом динамически (через enter frame) наполняем этот мувик экземплярами нашего кружочка-отпечатка, но каждому последующему кружочку задаем коорданаты расположения на сцене, совпадающие с координатами (для данного кадра) нашего мувика, движущегося по пути. Т.о. наши добавляемые экземпляры постепенно рисуют собой этот путь, а т.к. лежат в муве-маске, то т.о. нам пастопенно открывается наша картинка-контур. визуально эффект типа такого http://demiart.ru/forum/index.php?showtopic=29969 только в моем случае это будет не покадровая анимация, а AS3, и не рука а рукописная надпись, которую типа кто-то пишет Возможно, этот эффект можно получить с помощью другого алгоритма. Буду рада любому предложенному решению. P.s. В AS 3.0 я еще новичок, но учусь быстро)) |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Парадокс в том, что если Вы сможете описать путь, то и маска как бы совершенно не нужна)))
Весь вопрос как раз в том, как описать путь, последовательность координат. Если надпись известна заранее (текст и шрифт), то можно забить координаты в Vector или массив. Снять последовательность координат можно, написав свой маленький "редактор", взяв простой алгоритм "рисовалки", изменить его так чтобы координаты точек, по которым рисуется линия, записывались в массив (или просто трейсились), и аккуратно обвести надпись, подложив готовую картинку. Вы наверное видели такие рисовалки на флэше, которые сохраняют последовательность рисования и потом могут воспроизвести ее, как мультик. Я думаю надо копать в эту сторону.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
Ваша идея понятна, но маска все же нужна, т.к. рисунок-контур под ней переменной толщины (шрифт имитирует разный нажим пера), он преравистый. и как я понимаю, заменить рисунок прорисовкой пути по координатам не подойдет.
и мне хотелось бы каких-то практических примеров кода. В моем алгоритме я не записываю эти координаты в массив, а просто на лету "считываю" их в каждом кадре с движущегося по пути мувика. Но у загвоздка встала в том, как зацикленно каждый кадр добавлять новый экземпляр одного и того же клипа, но с уникальным именем. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Почему просто не рисовать маску графиксом по координатам? Линия может быть не только 1 пиксель толщиной)) Все лучше, чем несколько тысяч клипов.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
Ок. Давайте, пожалуйста здесь поподробнее. Про график и про координаты. Буду благодарна за ссылки на поясняющий материал и на примеры.
P.s. еще как-то на практике столкнулась с проблемой, что линия как таковая не применялась как маска, и пришлось заменить ее на прямоугольник толщиной 1-2 пикселя. Подскажите новичку? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Возможно, не ставили маске cacheAsBitmap = true;
Цитата:
На каждый кадр (ENTER_FRAME) Вы снимаете координаты ручного мувика на гайде (если я правильно понял). И рисуете в маске линию в эту координату ( Graphics#lineTo() ). Ну, или добавляете свой кружок в эту координату.. Боюсь только что в таком случае линия будет прерывистой.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
Нет не ставила. Поместила программно экземпляр своей картинки на сцену, сверху программно нарисовала линию (lineStyle,moveTo,lineTo), сделала линию маской. Результат - при публикации нет ничего (ни маски, ни картинки). Если вместо линии использовать например прямоугольник (с такими же физ размерами) - все работает.
В чем подвох? Добавлено через 3 минуты Допустим, я обрисовала линиями свой рукописный шрифт с помощью массива координат (на самом деле еще сложность с отрывом пера от бумаги для написания отдельных букв, пока получается делать только по 2буквы, если брать больше, то линия вопреки логике рисуется и месте отрыва). Теперь вот эта проблема с линией-маской. Добавлено через 10 минут Цитата:
Последний раз редактировалось BGI_HANNA; 22.06.2012 в 18:14. |
|
|||||
|
Цитата:
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
И моя работа по отрисовке линии по массиву координат пути насмарку? В хелпе адоба пишут: В экранном объекте, выбранного в качестве маски, используются только заливки; обводки игнорируются.
Как быть в моей ситуации? Последний раз редактировалось BGI_HANNA; 22.06.2012 в 18:39. |
|
|||||
|
Регистрация: Jun 2012
Адрес: Минск
Сообщений: 6
|
Всем спасибо за идеи и советы. Свою задачу я решила с помощью матрицы координат и Shape, которые по мере обновления экрана генерировались по этим координатам, постепенно заполняя маску. Желаемый эффект достигнут при минимальном коде.
Добавлено через 50 минут Отдельное спасибо модератору за его простое решение и пример кода. В данном случае я его уже не применяла, но обязательно учту на будущее. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|