Красивый эффект снега
Итак, для начала поздравляю всех с Новым, 2010, Годом, поздравляю не просто так, а свежей открыткой и разъяснениями, как реализован эффект снега в открытке.
Итак, для начала нужно нарисовать снежинку. Я б рекомендовал просто кружок диаметром 5 пк, с радиальной заливкой до прозрачности. Упаковываем его в мувик, нажав F8 и выбрав "Фрагмент ролика". Жить мувик будет в библиотеке, вытаскивать на сцену его будет скрипт. Для этого идем в свойства мувика и устанавливаем ему идентификатор (Instance name) "snow". Это ж снег, все же. Затем идем в таймлайн и в верхнем слое в первом кадре прописываем скрипты.
Этим отрезком определяем, как будет двигаться снег:
{
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;
}
}
Учитывается также возможность изменения размеров поля, где будет снежно, за границы которого снежинки не вылетят, а также максимальные размеры снежка, и их количество, вызываемое на сцену:
height = 400;
max_snowsize = 10;
snowflakes = 50;
i = 0;
while (i < snowflakes)
{
Не рекомендую накручивать значения количества и размеров снежков - будет сильно грузить процессор, ролик будет подвисать. Собственно, следующим мы фрагментом вызовем на сцену из библиотеки мувик со снежком. Замечу, что снежкам будет задаваться разный размер и создаваться иллюзия, что те, что дальше от зрителя - те меньше, а те, что ближе - больше.
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;
}
Ну и как всегда для тех, кто хочет здесь и сейчас, весь скрипт целиком:
{
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. В таких случаях, я рекомендую положить в мувик со скриптом снега еще квадрат, шириной/высотой с основной ролик, но сделать его прозрачным. Тогда вам будет проще установить клип со снегом точно в координаты.
Скачать исходник, где снег позади объектов.
Итак, есть вопросы?



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