PDA

Просмотр полной версии : Создание прожигающего лазера


martsoft
18.05.2013, 22:18
Добрый день уважаемые форумчане!
Бьюсь над задачей анимации лазерного луча прожигающего изображение на плате. Решил что такое возможно реализовать с помощью маски, но столкнулся я с определёнными проблемами.
1) Пустил клип лазера по пути и связал его положение «точкой» маски реализовал - это через onClipEvent(enterFrame) но никак не додумаюсь как оставлять после «точки» след чтоб получился эффект прожига.
2) Есть мысля реализовать подобный шлейф через attachMovie но незнаю но боюсь что этот момент будет сильно грузить компьютер через какоето время. как реализовать цикл и как его тормозить пока плохо представляю.
Рабочий момент здесь (http://ivanmart.ru/flash/xboxvorkuta/xboxvorkuta.html)

Может у кого есть какие либо соображения по этому вопросу или кто может подкинуть сслку на подобное решение буду рад любой информации.

dark256
19.05.2013, 11:10
Мало что понял из описания сути вопроса....

martsoft
19.05.2013, 14:32
Прошу прошения я наверное как-то мудрёно выразился (писал вечером голова была проблемой занята и толком не соображала).
Задача: В общем задача на первый взгляд простая::
Есть трафарет и схематичным рисунком джойстика от xbox. Необходимо создать анимацию лазерного луча который бы вырезал на фоне этот трафарет.
Как решал: 1) Создал клип лазера, пустил его по «пути».-результат лазер ходит по трафарету. 2) Создал маску точку «отверстие» -положил под неё трафарет и связал программно через событие onClipEvent(enterFrame) координаты лазера и маски. – результат лазер ходит точка «отверстия» за ним.
Проблема: Не пойму как сделать чтобы за лазером оставалась «полоса» шлейф от прорезки.
Может кто встречал решение подобной задачи или может что ни будь подсказать от куда начать и как двигаться.
http://ivanmart.ru/flash/xboxvorkuta/laser_luch.jpg

Tails
19.05.2013, 16:04
Движение лазера:
Места где проходит лазер отрисовываеш линией, затем делаешь её направляющей движения для своего лазера.

Постепенное проявление:
Ложиш картинку под маску, каждый кадр дорисовываешь маску в том месте, где прожёг лазер.

martsoft
19.05.2013, 16:53
Спасибо Tails. Но я хочу программно этот эфект выполнить чтоб был в моей копилке опыта раз и навсегда. Решил идти через построение линий moveTo и curveTo. Вот сижу придумываю код. Задумка на такой эффект давно уже сидит в моей голове.

Tails
19.05.2013, 17:07
Кодом, оптимальным вариантом, думаю будет:
1. Задавать точки для прожига: Array[Point]
2. Задать радиус просвета картинки из маски от точки прожига: Number
3. Задавать фоновую картинку: BitmapData или DisplayObject

Это минимальные параметры для класса, который будет заниматься "прожигом". Далее класс, по полученным данным будет визуализировать эффект "прожига".
Самое примитивное строение класса:
1. Вешает на переданную картинку маску.
2. Двигает клип лазер от точки к точке по порядку.
3. В месте прожига, рисует в маске кружок заданного радиуса.

Хотя, вариантов исполнения столько-же, сколько существует адептов Flash.
Я бы сделал так.

martsoft
19.05.2013, 17:17
Хотя, вариантов исполнения столько-же, сколько существует адептов Flash.
Вот и я думаю кто-то видь уже сталкивался с подобным моментом или видел где как такие вещи программно решаются. За совет спасибо.. вчера с классами возился запутался.. да и объектов нарожал Туеву Хучу.
Чую что должно быть простое и универсальное решение.

Tails
19.05.2013, 17:25
Я такой эффект для обычных баннеров во Flash ide делал. Пишущий карандаш или лазер - это одно и тоже, двигается ручка по направляющей и обновляется маска под ней - эффект писания. Минус от программного способа в том, что редактировать эффект после создания очень сложно, так-как нужно все кадры маски по новой перерисовывать.

Готовых классов не встречал, да и не искал.

martsoft
19.05.2013, 17:34
О ручка! Спасибо друг, ты мне тему погуглить подбросил .. это же эффект письма и ручки как я недогадался, пойду интернет покопаю!

martsoft
01.06.2013, 13:30
В общем проблема решилась следующем образом:
Отрисовку и движение лазера произвёл как рекомендовал Tails «цитата».
Долго искал как можно реализовать шлейф от лазера и совершенно случайно на одном сайте (Магический прототип - http://www.noinimod.ru/51/) наткнулся на action код который создавал прототип с эффектом шлейфа чуть подогнал его под свои нужды и всё срослось. (Правда под лазер его решено было не использовать но как эффекты на фоновом слое смотрится великолепно). Работу можно увидеть http://www.xboxvorkuta.ru/ .
Теперь вот немогу понять во всех браузерах отображение ролика идёт нормально а в Opere джостик отрисоввывается без наезда и всё.. всё уже проверил и Опера 12.4 и новый flash плейр и кеш уже почистил всё равно толку нет , прям не знаю что и думать. Народ только у меня так или у ковото ещё?

Tails
01.06.2013, 14:54
В моей опере тоже не увеличивается джостик.

Бесполезно гадать, необходимо сузить область поиска проблемы. Если увеличение джостика - программное, возможно, в баннере возникает ошибка, из-за которой выполнение кода прекращается.
Нужно пробовать и искать..

martsoft
02.06.2013, 15:56
Спасибо за подсказку. Отрисовку джостика лазером сделал в отдельном мувике наезд просходит не программно но из этого мувика через tellTarget отдаются команды (в ключевом кадре) на основную сцену а там происходит масштабирование мувика. Ситуация по видимому изменилась когда я ввёл условие. Условие мне понадобилось потому что в конце по сценарию клипа джостик отрисоввыался лазером без наезда в сторонке. использовать этотже мувик без изменений нельзя было поэтому пришол к выводу что необходимо создавать условие. Пример условия в ключевом кадре:
if (_root.gostx==0){
tellTarget("_root.fon"){
gotoandplay("naezd");
}
}
_root.gostx = _root.gostx + 1; вообщем создал переменную gostx в корне сцены поставил условие если gostx=0 то в мувике fon переходим на метку naezd (там как раз и есть анимация увеличения джостика через Classic Tween) потом увеличиваю gostx на еденичку (соответственно при повторном проходе наезжать не будем). Вот так происходит увеличение. Tails если видишь ошибку в моей логике подскажи, зарание спасибо.http://ivanmart.ru/flash/xboxvorkuta/scrin.gif

martsoft
08.06.2013, 20:30
Всё решил проблемку! Проблема была в объявлении переменной... раньше думал что переменые в экшене необязательно объявлять. Вото оказалось - показалось! объявил переменную заранее указал её тип и Opera съела swf-ку на ура! Так-то.

dark256
09.06.2013, 01:09
Таймлайн монстрообразен....
Если все получается так сложно, значит - что-то делаете не так.

martsoft
10.06.2013, 19:05
Это теплайн мувиклипа с отрисовкой лазера... вот иммено эту проблему я стемился решить программно но не вышло а так как лазеров несколько вот и слоёв так много (на каждый лазер по три слоя получается:путь лазера, лазер, , маска прорези, подложка) вот и родился этот монстер)