Дострочное пересдача экзамена
|
Автоматизация скриптов с помощью циклов
Что будет изучаться
В этом уроке:
- Как и для чего применять циклы
- Разновидности циклов
- Установление условий цикла
- Создание вложенных циклов
- Прерывание циклов
В этом приложении раскрывающийся список и "сетка" картинок (2 на 2) будут формироваться динамически с помощью циклов.
Время выполнения
На выполнение этого урока требуется примерно 45 минут.
Файлы урока
Файлы-носители:
Нет
Стартовые файлы:
Lesson10/Assets/pictureShow1.fla Lesson10/Assets/phoneNumberSearch1.fla
Законченные проекты:
pictureShow3.fla phoneNumberSearch2.fla
Для чего применяются циклы
Циклы служат для повторения какого-либо действия (или набора действий). Добавив всего несколько строк ActionScript, можно заставить Flash повторять эти действия сколько угодно раз! Обычно циклы применяются в следующих ситуациях (кстати, в некоторых из них без циклов обойтись трудно, а то и невозможно).
- Динамическая генерация раскрывающихся списков
- Проверка правильности данных
- Поиск по тексту
- Динамическое дублирование фильмов-символов
- Копирование содержимого массива в другой массив
- В играх выявление столкновений движущихся "снарядов" с объектами
С помощью циклов можно автоматизировать многие задачи. Взять, к примеру, динамическое создание экземпляров фильма-символа. Допустим, требуется равномерно разместить в проекте 100 экземпляров одного и того же клипа. Для этого совсем не обязательно перетаскивать все 100 экземпляров из библиотеки на сцену и выравнивать их – достаточно перетащить один экземпляр и написать скрипт из четырех-пяти строк – оператор цикла, который автоматически создаст сотню дубликатов и равномерно разместит их на сцене. Более того, этот оператор цикла можно модифицировать и использовать в проекте несколько раз.
Еще одно преимущество скриптов – динамичность. Предположим, мы создали цикл для динамической генерации меню из 15 пунктов (кнопок). Слегка изменив скрипт с этим циклом, можно без проблем динамически добавить или удалить отдельные пункты. А если меню создано вручную, то добавить или удалить пункты будет затруднительно, ведь придется еще перемещать остальные пункты вверх или вниз, возможно, еще и вносить изменения в скрипты там и сям.
В этом уроке (да вообще в оставшейся части книги) вы сможете сами убедиться, сколь большое значение имеют циклы в программировании.
Разновидности циклов
В ActionScript имеется три различных оператора циклов. Все три имеют общую черту: выполняют действие или набор действий, пока выполняется ( true ) определенное условие.
Оператор цикла while
Синтаксис этого оператора следующий:
while (someNumber < 10) { // выполняемые действия (тело цикла) }
Здесь выражение someNumber < 10 есть условие, определяющее число итераций (повторов цикла). На каждой итерации выполняются действия, помещенные в тело цикла. О том, как правильно выбрать и задать условие цикла, мы поговорим в следующем разделе – "Выбор условия цикла". А вот пример применения цикла while:
i = 0; while (++i <= 10) { myClip.duplicateMovieClip("myClip" + i, i); }
Данный скрипт создаст 10 дубликатов клипа myClip.
Оператор цикла for
Оператор for – компактный и удобный способ программирования циклов, основанных на том, что значение некоторой переменной при каждой итерации увеличивается или уменьшается на единицу. Удобен он тем, что инициализация переменной цикла, установление условия цикла, инкремент (или декремент) переменной – на все это требуется всего одна строка ActionScript. Синтаксис операторов for и while различен, но по смыслу они схожи. Какой именно использовать в том или ином случае – зависит от ваших предпочтений и конкретных обстоятельств. Синтаксис оператора for таков:
for (someNumber = 0; someNumber < 10; ++someNumber) { // выполняемые действия (тело цикла) }
Три элемента в круглых скобках, разделенные точками с запятой, определяют число выполняемых итераций. В данном примере создается переменная someNumber, которой присваивается начальное значение 0. Затем указывается, что тело цикла следует повторять, пока значение someNumber меньше 10. Последний элемент определяет, что при каждой итерации значение someNumber должно увеличиваться на 1 – в конце концов значение someNumber достигнет 10 (таким образом, цикла будет прекращен после девяти итераций).
Сама структура цикла for говорит о том, что он применяется главным образом там, где набор действий нужно выполнить определенное число раз. Приведенный выше пример для цикла while с помощью оператора for запишется так:
for (i=0; i<=10; ++i) { myClip.duplicateMovieClip("myClip" + i, i); }
Данный цикл создаст 10 дубликатов клипа myClip.
Оператор цикла for..in
Этот оператор применяется для "прохода" по всем свойствам объекта. Синтаксис его таков:
for (i in _object) { // выполняемые действия (тело цикла) }
Здесь i – переменная, используемая для временного хранения (на каждой итерации) имени очередного свойства. Значение i можно использовать внутри тела цикла. Рассмотрим практическое применение этого оператора на следующем примере:
car = new Object(); car.color = "red"; car.make = "BMW"; car.doors = 2; for (i in car) { result = result + i + ": " + car[i] + newline; }
Сначала этот скрипт создает объект с именем car. Затем для объекта car создаются свойства (считайте, что это просто переменные внутри объекта car ) с соответствующими значениями. Затем цикл for..in проходит по всем свойствам объекта car, причем в переменную i помещается по очереди имя каждого свойства. Значение i используется в теле цикла. По завершении цикла переменная result будет содержать текстовую строку с перечислением всех свойств и их значений.
На первой итерации i получает строковое значение "doors" (так как последним было определено именно это свойство). Таким образом, на первой итерации выражение в теле цикла получится таким:
result = result + "doors" + ": " + 2 + newline;
После первой итерации переменная result будет иметь значение
"doors: 2 "
Нужно пояснить, что в выражении переменная i (без квадратных скобок) содержит имя свойства ("doors", "make" или "color"). А элемент car[i] – это ссылка на значение этого свойства; все равно, что написать, например, car.doors.
Итак, по завершении всего цикла result будет иметь следующее строковое значение:
"doors: 2 make: BMW color: red"
Поскольку объект car имеет три свойства, цикл for..in в этом скрипте автоматически выполнит три итерации.
Данный оператор цикла обычно применяется в следующих случаях:
- Для выявления значений всех переменных, содержащихся на монтажном столе или в объекте
- Для выявления имен всех объектов, содержащихся на монтажном столе или в объекте
- Для выявления имен и значений всех атрибутов документа XML
Совет При создании переменной в объекте она помещается в так называемый ассоциативный массив. Как вы знаете, в обычных массивах для ссылки на элемент служит его индекс – номер (нумерация начинается с 0). В ассоциативном же массиве ссылкой на элемент служит его имя. Описанный оператор цикла просто перебирает все элементы ассоциативного массива, относящегося к указанному монтажному столу или объекту.