Магия частиц. Программные эффекты во Flash.

Аватар пользователя flahhi
flahhi
Не в сети
Регистрация: 23.08.2012
Баллы: 284
Магия частиц. Программные эффекты во Flash.

Сейчас я расскажу вам о магии которая потрясает меня каждый раз когда я с ней сталкиваюсь. Все наверное знают, как сложно рисовать покадровую анимацию, в том числе и эффекты. Первый раз увидев программные эффекты  у хитри, я подумал, - как просто и как гениально. Все сводится до того, что анимируется одна частица, а потом дублируется много раз! Недостатком, конечно является нагрузка на процессор, но в наше время это уже не столь важно. Изменив частицу, мы получим другой эффект, изменив анимацию - тоже. Но принципиальных изменений можно достигнуть путём изменения кода, а это не всем под силу. На просторах интернета можно найти разные движки для as3 которые работают с частицами (Partigen например), но они в основном платные. И плюс, это не интересно, использовать что-то не зная как это работает. Хватит слов, смотрим презентацию:

Здесь много о чём можно рассказывать. Чтобы достигнуть результата, который изображён на первом кадре, или лучше, нужно разбираться в классах и включить своё воображение на полную катушку :) Структура клипа с анимацией частицы проста. Рисуем частицу (или несколько частиц ) и оборачиваем в клип (ВНИМАНИЕ: если вы нарисовали несколько частиц, то этому клипу назначаем имя rest). Оборачиваем в ещё один клип. Внутри него делаем анимацию и даём ему имя. Начнём знакомится с классами.Класс MagicParts - это базовый класс (класс отец) для классов PointPart  и LinePart. Класс Explosion - особенный класс. Чтобы творить магию, нам не придётся пользоваться классом MagicParts. Мы будем использовать только его наследников. Так что о нём можно забыть Smile Класс PointPart  предназначен для создания эффектов выходящих из одной точки (огонь, водопад, дым и т.п.). Принимает он 4 параметра, которые вы видите на слайде 2. Первый - это место, куда мы лепим эффект. Это stage или movieclip, ну или sprite... Вторым параметром передаём имя класса частицы (которую мы создали и назначили,собственно, этот класс). Клип для привязки нужен только для того, чтобы использовать его координаты для позиционирования эффекта. Boolean переменная нужна если вы нарисовали несколько частиц. В этом случае, этим параметром, можно отключить случайный выбор клипа. На третьем слайде показано как сделать радиальный эффект. density  - это плотность частиц. Лучше её не ставить большой, а то даже новые навороченный компьютеры иногда жалуются Smile На слайде 4 видим, что установив значения startAngle и endAngle - получим кусок горячего торта)) Если клип к которому привязывается эффект анимировать, получится эффект как на слайде 5. Еще во всех классах есть один метод о котором я не упомянул в презентации, но использовал на первом слайде. Это метод destroy(). Он присутствует во всех классах и, как вы уже наверное догадались, уничтожает частицы. Следующий класс Explosion. С ним всё просто - первые 4 параметра мы уже знаем, дальше идёт насыщенность (тут, кстати, можно поставить число по больше) и координаты, которые используем, например, если надо установить эффект на клик мышки. При этом клип привязки должен быть null. На 7-м слайде ещё один класс. С ним я думаю всё будет понятно без слов. Ну и, если кому интересно, текст в конце получается наложением маски на эффект. | исходник | классы |Со следующим уроком я пока не определился. Уж сильно время поджимает.

 

Аватар пользователя LeeTovetz
LeeTovetz
Не в сети
Регистрация: 24.08.2012
Баллы: 401

Вау. Это просто супер. ОЧень впечатлило. Молодчинка.
А я было уже хотел напоминать про пятницу. Супер.
А правда что следующий урок будет про тотальную растеризацию ??? )))

моя радость тут ))) http://leetovetz.deviantart.com/gallery/

Аватар пользователя flahhi
flahhi
Не в сети
Регистрация: 23.08.2012
Баллы: 284

Спасибо. Зря о пятнице не напомнили, а то я уже думал, что все забыли и никому не надо))) У меня просто попутно куча разных дел, так что пришлось потратить выходные. Если хотите растризацию, - сделаем!) Только вот со сроками ничего сказать пока не могу. Тут ещё в универе подкинули задачу. Называется "Волчий остров" (тут нагуглил приблизительную формулировку). Скорее всего буду делать во флеше, потому, ессли кому интересно, могу выкладывать здесь постепенно на правах урока по программированию)). 

Аватар пользователя Oksana
Oksana
Не в сети
Админ
Регистрация: 02.06.2011
Баллы: 500

Андрей, спасибо за прекрасный урок) про пятницу все помнили, просто тактично не подгоняли) все мы люди занятые, это ж понятно. а задачи по программированию было бы интересно, конечно же)

Аватар пользователя LeeTovetz
LeeTovetz
Не в сети
Регистрация: 24.08.2012
Баллы: 401

Да. ПОддерживаю Тотальную растеризацию и задачи по программированию во флеше.
Мы говорил что ты наш герой AS 3.0? Неееет? Ну тогда говорим - Ты наш гуру и герой AS 3.0!!!

моя радость тут ))) http://leetovetz.deviantart.com/gallery/

Аватар пользователя LeeTovetz
LeeTovetz
Не в сети
Регистрация: 24.08.2012
Баллы: 401

А такой вопрос А как регулировать этот эффект по тайм лайну.
Например. сцена на улице - идет снег. Вторая сцена - герой зашел в дом. Сцена третья - опять вышел на улицу идет еще больший снег и феерверк бахкает.

моя радость тут ))) http://leetovetz.deviantart.com/gallery/

Аватар пользователя flahhi
flahhi
Не в сети
Регистрация: 23.08.2012
Баллы: 284

 :) спасибо. С тайм лайном всё просто. В каждом классе есть метод destroy(), я упоминал о нём. Когда нужен снег(например на 56-м кадре) - создаём объект:

if (clip.currentFrame == 56)

{

lp = new LinePart(clipSnowPart, begin, end);

}

Когда он уже не нужен (например на 156-м кадре) вызываем дестрой:

if (clip.currentFrame == 156)

{

lp.destroy();

}

Понятно, что всё это делается в теле обработчика события Event.ENTER_FRAME. Ну и задекларировать сам обьект лучше вверху, чтобы ссылаться не него где угодно... 

public var lp:LinePart;

Если опять нужен тот же самый (или чуть другой) снег, делать новый объект не нужно. Достаточно переопределить старый:

lp = new LinePart(clip, SnowPart1, begin, end);

Так поступаем со всеми объектами.

Аватар пользователя Renderdoll
Renderdoll
Не в сети
Регистрация: 24.08.2012
Баллы: 43

flahhi, огромное спасибо за такой подробнейший, красивый и интересный урок! Не устану его читать и пересматривать! Smile))

Аватар пользователя flahhi
flahhi
Не в сети
Регистрация: 23.08.2012
Баллы: 284

Рад стараться!) А я, наверное, никогда не устану пересматривать "Тайну Келлса")))

Аватар пользователя Renderdoll
Renderdoll
Не в сети
Регистрация: 24.08.2012
Баллы: 43

Laughing out loud flahhi, рада что вам понравилось! Тоже фанатка красивых мультиков. Smile))

Пожалуйста, оставьте ваш комментарий. Спасибо!

Для комментирования войдите или зарегистрируйтесь