4 марта 2011 г.

Action Script 3. Урок 8. Функции.

Привет всем. Сегодня мы продолжим изучение Action Script 3, и рассмотрим создание пользовательских функций.

По сути, мы использовали функции все время изучения as3, когда создавали те или иные события — там без функций просто не обойтись. Однако как еще можно использовать вспомогательные алгоритмы? К примеру, нам нужно постоянно производить одно и то же действие, возможно, с разными параметрами. И чтобы не писать много раз один и тот же код, лучше один раз ввести функцию. Рассмотрим на простом примере.
function drawingF(obj_x:Number,obj_y:Number, obj_r:Number, obj_c:uint):Sprite {
var obj:Sprite = new Sprite();
obj.graphics.beginFill(obj_c);
obj.graphics.drawCircle(obj_x,obj_y,obj_r);
addChild(obj);
return obj;
}
for(var i:Number=50;i<=500;i+=100) {
drawingF(i,50,25,0x555555);
}
for(i=50;i<=400;i+=100) {
drawingF(50,i,25,0x555555);
}

Итак, что же мы этим кодом сделали. Для начала обозначили функцию как обычно — function. Далее идет имя, а также параметры функции — данные, которые объявляются при вызове функции и используются самой функцией внутри. В теле функции мы пишем некоторые действия, которые нужно выполнить. Самое главное — нужно помнить, что функция имеет тип, т.е. несет какое-то значение. В нашем случае функция возвращает объект obj Sprite объект с заданными координатами и размерами.
Сама функция создает окружность с заданным радиусом, координатами, цветом. Все это мы зададим ниже при вызове.
Если функция не будет ничего возвращать (просто выполнять те или иные действия, например при прослушивателе мыши и т.п.), то она будет иметь тип void, который мы уже указывали ранее.
В нашем случае функция имеет тип Sprite, поэтому она обязана возвращать спрайт. Для этого после всех действий пропишем
return obj;

(англ. return — "возвращать").
Чтобы как-то показать действие функции, создадим два цикла, с параметром i, в первом он служит для изменения абсциссы, а во втором — ординаты. В телах циклов вызываем функции с помощью их имени и в скобках указанное ранее количество параметров.
Запустим. Видим, что левая и верхняя стороны заполнились объектами. Таких циклов можно создать хоть сколько, но если не использовать функцию, то код будет неприемлемо огромным.
[swfobj src="http://cyber-page.ru/wp-content/uploads/2011/03/1.swf"]

Уберем, к примеру, циклы, и добавим прослушиватель:
stage.addEventListener(MouseEvent.CLICK,drawF);
function drawF(e:MouseEvent):void {
drawingF(mouseX,mouseY,25,Math.random()*0xFFFFFF);
}

При нажатии получаются разноцветные круги. Здорово, экономно, удобно.
[swfobj src="http://cyber-page.ru/wp-content/uploads/2011/03/2.swf"]

Посмотрим еще пример.
Создадим треугольник, и с помощью функций найдем его площадь.
1. Введем три точки, которые будут являться вершинами треугольника.
var p1:Point=new Point();
var p2:Point=new Point();
var p3:Point=new Point();

Класс Point — это точка, которая имеет координаты х и у, а также некоторые свойства. Создавать точки вместо обычных Number переменных гораздо практичнее.
2. Определяем координаты будущего треугольника.
p1.x=200,
p1.x=100,
p1.y=50;
p2.x=150;
p2.y=150;
p3.x=50;
p3.y=150;

3. Создадим функцию рисования линии по координатам.
function drawingF(t1:Point, t2:Point):void{
graphics.lineStyle(1);
graphics.moveTo(t1.x,t1.y);
graphics.lineTo(t2.x,t2.y);
}

4. Вызывая функцию, нарисуем треугольник.
drawingF(p1,p2);
drawingF(p2,p3);
drawingF(p3,p1);

5. Создадим функцию, считающую длину стороны.
function lenght(t1:Point,t2:Point):Number{
var len:Number=Math.sqrt(Math.pow(t2.x-t1.x,2)+Math.pow(t2.y-t1.y,2));
return len;
}

Функция Math.pow() возводит заданное число в заданную степень.
6.Вычисляем площадь по формуле Герона.
var p:Number=(lenght(p1,p2)+lenght(p2,p3)+lenght(p3,p1))/2;
trace(Math.sqrt(p*(p-lenght(p1,p2))*(p-lenght(p2,p3))*(p-lenght(p3,p1))));

Запустим. Построился треугольник, в окне вывода — площадь.
[swfobj src="http://cyber-page.ru/wp-content/uploads/2011/03/3.swf"]

Теперь подумаем, если бы мы не использовали функции, каким был бы код?

0 коммент.:

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