Красивый эффект снега

Опубликовано 31 12 2009 Начлаб

Итак, для начала поздравляю всех с Новым, 2010, Годом, поздравляю не просто так, а свежей открыткой и разъяснениями, как реализован эффект снега в открытке.

Итак, для начала нужно нарисовать снежинку. Я б рекомендовал просто кружок диаметром 5 пк, с радиальной заливкой до прозрачности. Упаковываем его в мувик, нажав F8 и выбрав "Фрагмент ролика". Жить мувик будет в библиотеке, вытаскивать на сцену его будет скрипт. Для этого идем в свойства мувика и устанавливаем ему идентификатор (Instance name) "snow". Это ж снег, все же. Затем идем в таймлайн и в верхнем слое в первом кадре прописываем скрипты.
Этим отрезком определяем, как будет двигаться снег:

function mover()
{
this._y = this._y + this.k;
this._x = this._x + this.wind;
if (this._y > height + 10)
{
this._y = -20;
}
if (this._x > width + 20)
{
this._x = 0 - width / 2 + Math.random() * 1.5 * width;
this._y = -20;
return;
}
if (this._x < -20)
{
this._x = 0 - width / 2 + Math.random() * 1.5 * width;
this._y = -20;
}
}

Учитывается также возможность изменения размеров поля, где будет снежно, за границы которого снежинки не вылетят, а также максимальные размеры снежка, и их количество, вызываемое на сцену:

width = 500;
height = 400;
max_snowsize = 10;
snowflakes = 50;
i = 0;
while (i < snowflakes)
{

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

t = attachMovie("snow", "snow" + i, i);
t._alpha = 20 + Math.random() * 60;
t._x = 0 - width / 2 + Math.random() * 1.5 * width;
t._y = 0 - height / 2 + Math.random() * 1.5 * height;
t._xscale = t._yscale = 50 + Math.random() * max_snowsize * 10;
t.k = 1 + Math.random() * 2;
t.wind = -1.5 + Math.random() * 4.2;
t.onEnterFrame = mover;
++i;
}

Ну и как всегда для тех, кто хочет здесь и сейчас, весь скрипт целиком:

function mover()
{
this._y = this._y + this.k;
this._x = this._x + this.wind;
if (this._y > height + 10)
{
this._y = -20;
}
if (this._x > width + 20)
{
this._x = 0 - width / 2 + Math.random() * 1.5 * width;
this._y = -20;
return;
}
if (this._x < -20)
{
this._x = 0 - width / 2 + Math.random() * 1.5 * width;
this._y = -20;
}
}
width = 500;
height = 400;
max_snowsize = 10;
snowflakes = 50;
i = 0;
while (i < snowflakes)
{
t = attachMovie("snow", "snow" + i, i);
t._alpha = 20 + Math.random() * 60;
t._x = 0 - width / 2 + Math.random() * 1.5 * width;
t._y = 0 - height / 2 + Math.random() * 1.5 * height;
t._xscale = t._yscale = 50 + Math.random() * max_snowsize * 10;
t.k = 1 + Math.random() * 2;
t.wind = -1.5 + Math.random() * 4.2;
t.onEnterFrame = mover;
++i;
}

При помещении скрипта в первый кадр просто на уровне _root, снег будет идти поверх основной картинки. Если вам хочется поместить снегопад позади, например, персонажа, кадр со скриптом следует создать в отдельном мувике, и поместить его на слой позади персонажа, в координаты x=0, y=0. В таких случаях, я рекомендую положить в мувик со скриптом снега еще квадрат, шириной/высотой с основной ролик, но сделать его прозрачным. Тогда вам будет проще установить клип со снегом точно в координаты.

Скачать исходник, где снег позади объектов.

Итак, есть вопросы?

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

2 комментариев to “Красивый эффект снега”

  1. Serge says:

    Спасибо за снежок) Но вот незадача, никак не получается сделать снег позади другого слоя…
    Если можно по подробней объясните.
    Спасибо.

  2. Начлаб says:

    Добавил ссылку на исходник, там снег сделан позади объектов, разбирайтесь. Хотя я вроде все абсолютно понятно и подробно описал.

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