25 декабря 2010 г.

Action Script 3. Урок 4. Циклы.

В этом уроке я расскажу, как пользоваться циклами, и для чего вообще они нужны.  Это 4-ый урок посвященный базовому изучению action script 3.

Урок 4. Циклы.

С помощью циклов в любом языке программирования можно осуществить различные повторяющиеся действия, причем циклы могут быть с условиями, с параметрами, со счетчиками. В action script 3 чаще всего используется цикл for, то есть цикл со счетчиком. Например, чтобы вывести различные случайные цифры в окно вывода, нужно написать вот такой код:
for (var i:Number=0; i<10; i++) {
trace(int(Math.random()*10));}

Тестируем, смотрим в Output, и видим десять рандомных чисел от 1 до 10.
Итак, что значат эти строчки. Мы обозначаем новый цикл со счетчиком, число повторений которого определяет переменная i, которую с типом Number мы тут же и вводим; дальше через точку с запятой пишем, до какого значения этой переменной цикл будет выполняться, в нашем случае до 10 - указываем при i меньше 10. А для того, чтобы наш цикл когда-нибудь закончился :), последним параметром указываем увеличение значения переменной при каждом выполнении цикла - если в начале i = 0, мы увеличиваем ее на 1, и делаем это до 10 - цикл выполняется 10 раз. Дальше в фигурных скобках указываем действия цикла, которые он выполнит 10 раз. Ключевое слово trace(выведет то, что указано дальше в круглых скобках). int - это округление числа до целого , а Math.random - это знакомая из предыдущего урока нам функция. Если бы не было int, то в окне вывода нам представлялись бы ужасные числа с 15+ знаками после запятой.

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

Это была небольшая демонстрация работы цикла, а теперь посмотрим, как его можно использовать во Flash.

1. Нарисуем три объекта, преобразуем их все в символы и расположим их как-нибудь беспорядочно на поле.



2. Даем им имена, например, ball1, ball2, ball3.

Создаем новый слой и добавляем туда любые  две кнопки из библиотеки (Window-Common Libraries-Buttons). Одну называем left и помещаем в левый верхний угол. Другую кнопку называем right и ставим в правый верхний угол. Теперь попробуем программно выровнять наши объекты под кнопками.

Объявляем слушатель нажатия на первую, левую, кнопку.
left.addEventListener(MouseEvent.CLICK, leftF);
function leftF(e:Event):void {

Затем начинаем новый цикл for,
for (var i:Number=1; i<4; i++) {

который будет выполняться 3 раза - от 1 до 4 (исключая 4).

И в теле цикла запишем вот такую строку.
getChildByName("ball"+i).x = left.x;
}
}

Здесь мы немного "перепрыгнем" вперед, потому что мы используем getChildByName - эта функция "хватает" объект со сцены, определяя его через имя. О ней и вообще о дочерних объектах мы будем говорить позже, уже в ближайшее время. Итак, мы берем объект со сцены, а  так как имена у наших объектов ball1, ball2, ball3, т.е. последовательные, то мы, пользуясь циклом,  обозначаем имена объектов сразу через переменную i, значение которой за все время выполнения идет по порядку от 1 до 3, совпадая с именами объектов. Присваиваем этому объекту х, равное координате х кнопки. Почему мы используем именно такой метод? Ведь такое действие можно осуществить и просто присвоив каждому объекту нужное х. А если у нас объектов 100, 200, 1000? Как раз-таки такой метод и понадобится.

Итак, еще подробно рассмотрим действие цикла.
i=1 - значит имя объекта, координату х которого мы будем изменять, это ball+i, то есть ball1. Изменили, дальше цикл идет по новой, но уже с i=2, то есть объект ball2. Когда цикл заканчивается, мы видим выстроенные в ряд шарики.

Аналогично выстраиваем для правой кнопки. Итак, вот такое у нас получается в итоге.

Исходник, если у кого что-нибудь не получилось.

Домашнее задание.

Есть ровно выставленные объекты. При нажатии на одну кнопку на сцене - они разбрасываются, при нажатии на другую, снова выстраиваются.

Решение предыдущего задания.
var timer:Timer = new Timer(100,15);
timer.start();
timer.addEventListener(TimerEvent.TIMER, goF);
function goF(e:TimerEvent):void {
ball.x = Math.random()*stage.stageWidth;
ball.y = Math.random()*stage.stageHeight;
}

stage.addEventListener(MouseEvent.CLICK, stopF);
function stopF(e:MouseEvent):void {
timer.stop();
}

stage.addEventListener(KeyboardEvent.KEY_UP, playF);
function playF(e:KeyboardEvent):void {
if (e.keyCode==32) {
timer.start();
}
}

Всем спасибо, урок окончен!  Ждем продолжения!

1 коммент.:

CuckFugh комментирует...

dating websites archive
Chop chop!
no love lost between
resort to
cd single websites

Action Script 3. Урок 4. Циклы. | Cyber's Page

best first message on dating websites
japan chat dating online site
free personals flint michigan

No one is complaining as in today jet speed world this is seen as a boon rather than bane.

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