Эффект взрыва

06.04.2008, автор Stormit, рубрики: ActionScript, Flash игры, Игровые баннеры

Сегодня мало какая игра или баннер обходятся без спецэффектов. Это и понятно, нужно успеть привлечь внимание посетителей раньше, чем они уйдут с сайта.

Основой большинства спецэффектов во флэше, является функция duplicateMovieClip. До появления програмного рисования и объекта BitmapData, это был чуть ли не единственный способ программирования flash-эффектов. Эта функция просто создает дубликат уже существующего клипа. В нашем случае, мы создаем набор дубликатов и дальше управляем ими по ситуации.

Сделав более 500 игровых баннеров, я заметил, что некоторые эффекты часто переходят из одной работы в другую и практически без изменений. Самый популярный среди них - эффект взрыва / брызг / осколков.

Рзберемся, как это делается (я еще не разобрался с аудиторией сайта, поэтому буду разжевывать) + пример ниже:

  1. Рисуем произвольную частицу (это форма нашего осколка), оборачиваем ее в символ (назовем его part).
  2. Еще раз оборачиваем part в символ (назовем его partGo) и внутри него делаем анимацию, как символ part улетает вправо постепенно уменьшаясь (например за 15 кадров).
  3. Помещаем 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; //добавляем реализм
    }
  4. Сейчас эффект есть, но выполняется циклично. Hам нужно только один раз, поэтому отрабатываем удаление. Спускаемся в символ partGo, добавляем 16-й (в нашем случае) пустой кадр и пишем в нем:
    _parent.removeMovieClip();//удалит клип boom если он добавлен программно
    stop();//просто остановит анимацию, если клип добавлен руками
  5. Готово! Наш символ 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);//ложим в случайное место
  6. Это основное, дальше клип boom можно наворачивать: добавить вспышку огня, лучи света, мерцание осколков, добавить растр, еще пофантазировать.

Теперь сохраняем полученный клип boom, и используем его по жизни сколько угодно раз. Стоит перерисовать форму частицы part, он легко превращается в любой boom-эффект, когда летят щепки, осколки, слюни, грязь, кровь, брызги и еще что-то разлетающееся в разные стороны.

Интересно на 20%

(9) Хитрых на тему «Эффект взрыва»

  1. Алексей

    Урок супер! То что искал:) Респект тебе! Только расскажи, пожалуйста, чайнику, как ты эти “облака” в центральном примере нарисовал

  2. Stormit

    Это легко. В фотошопе, в стандартном наборе кистей, выбери с именем Spatter. В настройках кисти лучше задать случайный угол поворота. И кликни пару раз :)
    обрежь по габаритам и экспортни как PNG.

  3. Саша

    Спасиба за урок!
    оч. интересно и полезно
    и Красиво:)

  4. Костя

    Огромное спасибо, брожу по сайту и ненарадуюсь

  5. DF

    Чёйто я не разобрался, как сделать 5/6. Подскажите плиззз

  6. Лика

    Он мне после первого кода выдает ошибку в первых трех строчках :(
    Что значит Statement must appear within on/onClipEvent handler?

  7. Адександр

    **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

    Подскажите что нужно сделать?

  8. Stormit

    Это значит что вы пишите код непосредственно на символе (не используя обработчик событий), а в данном случае код нужно писать в кадре.

  9. Костя

    Замечательно. О таком способе использовать команду дублирование думал, но не получалось. Прояснили сознание. Непонятно лишь как сделать разноцветные мувики.

Оставить комментарий