Эффект взрыва
06.04.2008, автор Stormit, рубрики: ActionScript, Flash игры, Игровые баннерыСегодня мало какая игра или баннер обходятся без спецэффектов. Это и понятно, нужно успеть привлечь внимание посетителей раньше, чем они уйдут с сайта.
Основой большинства спецэффектов во флэше, является функция duplicateMovieClip. До появления програмного рисования и объекта BitmapData, это был чуть ли не единственный способ программирования flash-эффектов. Эта функция просто создает дубликат уже существующего клипа. В нашем случае, мы создаем набор дубликатов и дальше управляем ими по ситуации.
Сделав более 500 игровых баннеров, я заметил, что некоторые эффекты часто переходят из одной работы в другую и практически без изменений. Самый популярный среди них - эффект взрыва / брызг / осколков.
Рзберемся, как это делается (я еще не разобрался с аудиторией сайта, поэтому буду разжевывать) + пример ниже:
- Рисуем произвольную частицу (это форма нашего осколка), оборачиваем ее в символ (назовем его part).
- Еще раз оборачиваем part в символ (назовем его partGo) и внутри него делаем анимацию, как символ part улетает вправо постепенно уменьшаясь (например за 15 кадров).
- Помещаем partGo еще в один символ (назовем его boom). Заходим обратно в символ boom и в кадре пишем такой код:
partGo._visible = false; //скрываем эталонный символ i = 30; while (i--) { d = partGo.duplicateMovieClip("p" + i, i); //делаем дубликат d._rotation = Math.random() * 360; //какой сектор покрываем d._xscale = d._yscale = Math.random()*70 + 50; //добавляем реализм }
- Сейчас эффект есть, но выполняется циклично. Hам нужно только один раз, поэтому отрабатываем удаление. Спускаемся в символ partGo, добавляем 16-й (в нашем случае) пустой кадр и пишем в нем:
_parent.removeMovieClip();//удалит клип boom если он добавлен программно stop();//просто остановит анимацию, если клип добавлен руками
- Готово! Наш символ boom можно помещать в любую анимацию и он отыграет свои 15 кадров и остановится. Если этот символ должен добавляться на сцену программно, то на линейку где лежит клип boom, нужно добавить код:
boom._visible = false; lev = 0; function placeBoom(x, y){ lev++; var d = boom.duplicateMovieClip("b" + lev, lev); d._x = x; d._y = y; } placeBoom(Math.random()*200, Math.random()*200);//ложим в случайное место
- Это основное, дальше клип boom можно наворачивать: добавить вспышку огня, лучи света, мерцание осколков, добавить растр, еще пофантазировать.
Теперь сохраняем полученный клип boom, и используем его по жизни сколько угодно раз. Стоит перерисовать форму частицы part, он легко превращается в любой boom-эффект, когда летят щепки, осколки, слюни, грязь, кровь, брызги и еще что-то разлетающееся в разные стороны.
Интересно на 20%


Урок супер! То что искал:) Респект тебе! Только расскажи, пожалуйста, чайнику, как ты эти “облака” в центральном примере нарисовал
Это легко. В фотошопе, в стандартном наборе кистей, выбери с именем Spatter. В настройках кисти лучше задать случайный угол поворота. И кликни пару раз
обрежь по габаритам и экспортни как PNG.
Спасиба за урок!
оч. интересно и полезно
и Красиво:)
Огромное спасибо, брожу по сайту и ненарадуюсь
Чёйто я не разобрался, как сделать 5/6. Подскажите плиззз
Он мне после первого кода выдает ошибку в первых трех строчках
Что значит Statement must appear within on/onClipEvent handler?
**Error** Symbol=boom, layer=Layer 1, frame=1:Line 1: Statement must appear within on/onClipEvent handler
partGo._visible = false;
**Error** Symbol=boom, layer=Layer 1, frame=1:Line 2: Statement must appear within on/onClipEvent handler
i = 30;
**Error** Symbol=boom, layer=Layer 1, frame=1:Line 3: Statement must appear within on/onClipEvent handler
while (i–) {
Total ActionScript Errors: 3 Reported Errors: 3
Подскажите что нужно сделать?
Это значит что вы пишите код непосредственно на символе (не используя обработчик событий), а в данном случае код нужно писать в кадре.
Замечательно. О таком способе использовать команду дублирование думал, но не получалось. Прояснили сознание. Непонятно лишь как сделать разноцветные мувики.