В недавних постах я уже затрагивал "снежную" тему и даже разбирал специальную библиотеку классов на ActionScript 3.0 для создания эффекта падающего снега в флеш-проектах. Сегодня же мы будем учиться рисовать снежинку, но снежинку мы будем рисовать не ручками, а кодом ActionScript 3.0.
Но, согласитесь, нам на практике, как правило, требуется не одна снежинка, а много-много экземпляров данной снежинки. При таких условиях, правильнее создать класс Снежинка (Snowflake), а затем просто добавлять экземпляры этого класса на сцену флеш-ролика.
Алгоритм рисования снежинки я позаимствовал из другого языка (честно говоря, я это уже давно сделал и первоисточника, к сожалению, не помню), но перевёл этот алгоритм на язык ActionScript 3.0 (можно и на ActionScript 2.0).
Итак, наш класс Snowflake.
Код ActionScript 3.0:
package
{
/*
импортируем необходимые классы
*/
import flash.display.Sprite;
import flash.filters.GlowFilter;
/*
тело класса
*/
public class Snowflake extends Sprite
{
/*
переменные
*/
private var _snowflake:Sprite;
private var _size:int = 100;
private var _g:int = 4;
private var _n:int = 8;
/*
функция-конструктор
*/
public function Snowflake(color:uint = 0xffffff, glow:int = 0x0066ff, scaleObj:Number = 1)
{
_snowflake = new Sprite ;
_snowflake.graphics.lineStyle(1,color,1);
draw_snow(0,0,_size,_g,_n);
_snowflake.scaleX = _snowflake.scaleY = scaleObj;
addChild(_snowflake);
_snowflake.filters = [new GlowFilter(glow,1,2,2,2,1,false,false)];
}
/*
рекурсивная функция, рисующая снежинку
*/
private function draw_snow(x:int,y:int,r:int,c:int,_n:int)
{
var a,i,xd,yd:int;
if (c>=1)
{
for (i=0; i<_n; i++)
{
a = 2 * Math.PI * i / _n;
xd = Math.round(x + r * Math.cos(a));
yd = Math.round(y + r * Math.sin(a));
_snowflake.graphics.moveTo(x,y);
_snowflake.graphics.lineTo(xd, yd);
draw_snow(xd,yd,Math.floor(r / 3), c-1, _n);
}
}
}
}
}
Сохраняем класс в виде файла Snowflake.as и помещаем в одну папку с нашим флеш-проектом.
Затем переходим к самому флеш-проекту. В нём на главной временной шкале пишем следующее...
Код ActionScript 3.0:
/*
импортируем класс
*/
import Snowflake;
/*
создаём экземпляр класса
*/
var snowflake:Snowflake = new Snowflake();
/*
добавляем его на сцену
*/
addChild(snowflake);
/*
позиционируем на сцене
*/
snowflake.x = 275;
snowflake.y = 200;
Теперь, если мы скомпилируем наш флеш-ролик, то получим примерно следующее:
Внешний вид снежинки можно настроить под конкретные требования. Для этого можно воспользоваться необязательными параметрами, передаваемыми в конструктор класса. Далее данные параметры описываются по порядку их следования:
color - цвет лучей снежинки (по умолчанию стоит белый - 0xffffff);
glow - цвет обводки (по умолчанию стоит светло-голубой - 0x0066ff);
scaleObj - данный параметр отвечает за размеры снежинки (по умолчанию данный параметр равен 1).
Для примера нарисуем красную снежинку с белой обводкой и немного уменьшим её в размерах по сравнению с предыдущей...
Код ActionScript 3.0:
import Snowflake;
var snowflake:Snowflake = new Snowflake(0xff0000,0xffffff,0.8);
addChild(snowflake);
snowflake.x = 275;
snowflake.y = 200;
Выглядеть это "чудо природы" будет так:
Но мы уже ранее говорили, что нам одной снежинки, скорее всего, будет мало. Поэтому давайте создадим много снежинок и разбросаем их по сцене флеш-ролика...
import Snowflake;
/*
в цикле создаём множество снежинок разного размера и случайным образом размещаем их по сцене флеш-ролика
*/
for (var i:uint; i<30; i++)
{
var snowflake:Snowflake = new Snowflake(0xffffff,0x0066ff,Math.random() * 0.2 + 0.1);
addChild(snowflake);
snowflake.x = Math.random() * stage.stageWidth;
snowflake.y = Math.random() * stage.stageHeight;
}
Получится примерно следующее:
Надеюсь, вам понравился данный урок. Исходник под Adobe Flash CS5.5 и сам класс Snowflake скачать можно здесь.