Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 5:

Применение функций

< Урок 4 || Урок 5: 123 || Урок 6 >
Аннотация: Занимаясь программированием, вы могли заметить, что используете одни и те же "куски" кода ActionScript по нескольку раз – может, просто пишете те же самые строки, или копируете и вставляете в другое место. Однако имеется возможность написать скрипт один раз, а затем повторно использовать его в любое время одной-единственной командой. Делается это посредством создания функций, а действие, выполняющее ее, называется вызовом функции. Применение функций позволяет здорово сэкономить время – как при разработке, так и при последующем обслуживании, ведь количество кода, который надо написать или изменить, заметно уменьшается. Считайте, что функции – это мини-программки, имеющие некоторое применение внутри основного приложения. Вы можете использовать функции для выполнения какого-то набора действий, или для обработки информации и получения результата, или для того и другого сразу. Функции – мощное и универсальное средство программирования.

В этом уроке вы узнаете, как создавать и использовать функции на примере программирования "пульта дистанционного управления" для Flash-телевизора.

Внимание! Для работы с этим уроком необходимы учебные файлы, которые Вы можете загрузить здесь.

Что будет изучаться

В этом уроке:

  • Создание функций
  • Вызов функции
  • Задание параметров функции
  • Создание функции, возвращающей результат
  • Использование локальных переменных

Для несложного Flash-приложения, представляющего телевизор с пультом управления, мы создадим несколько функций, позволяющих включать-выключать Flash-ТВ и переключать каналы.

Время выполнения

На выполнение этого урока требуется примерно полтора часа.

Файлы урока

Файлы-носители:

Нет

Стартовые файлы:

Lesson05/Completed/television1.fla
Lesson05/Completed/television2.fla
Lesson05/Completed/television3.fla

Законченные проекты:

television4.fla

Создание функций

Прежде чем использовать функцию, ее следует создать, или объявить. Для этого существует два варианта синтаксиса.

Синтаксис 1

В первом варианте программный код выглядит так:

function myFunction (аргумент1, аргумент2, и т.д.) {
  // выполняемые действия;
}

Приведенный код представляет наиболее общий способ создания функций, именно такой синтаксис будет по большей части использоваться в этом уроке. Как видите, объявление функции начинается с ключевого слова function, за которым следует имя функции (оно может быть каким угодно, только должно соответствовать общим условиям – как имена переменных, экземпляров и т.п.). Вслед за именем функции идут круглые скобки. Их можно оставить пустыми, либо указать в них аргументы (параметры), которые будет использовать функция. Оставляя скобки пустыми, вы создаете функцию без параметров – выполнение такой функции всегда имеет один и тот же результат. Если же функция имеет аргументы, то результат ее выполнения будет зависеть от конкретной информации, которую получит функция при вызове. Такое сообщение функции информации называется передачей аргументов или параметров. Вы можете указать любое необходимое число аргументов; о том, как их использовать – чуть позже.

Следом за круглыми скобками идет открывающая фигурная скобка, затем – какие-либо действия, и закрывающая фигурная скобка, которая завершает объявление функции. Между фигурными скобками вы помещаете набор действий, которые должна будет выполнять функция. Эти действия могут использовать значения аргументов, переданных в функцию.


Совет Скелет функции (то есть функцию, в которую вам предстоит добавить действия) вы можете создать при помощи инструментального окна панели Действия: выберите Actions > UserDefined Functions.

Синтаксис 2

В первом варианте код таков:

myFunction = function (аргумент1, аргумент2, и т.д.) {/*действия*/};

Этот вариант можно использовать для динамического создания функции или создания своего собственного метода для объекта (об этом мы расскажем в Уроке 6 – Создание и модификация объектов). Единственное отличие от первого варианта состоит в способе присвоения функции имени: имя функции стоит первым, ему, с помощью оператора присваивания " = ", назначается функция. Этот синтаксис вы сможете использовать только при ручном вводе в окно панели Действия, когда эта панель находится в Экспертном режиме ( Expert mode ).

Вызов функции без параметров имеет следующий синтаксис:

myFunction();

Когда вы вызываете функцию, Flash выполняет все действия, содержащиеся внутри этой функции. Если, к примеру, myFunction() содержит 20 действий, считайте, что все они уместились в одной этой строке скрипта.

Если функция объявлена с аргументами, вы должны использовать при ее вызове следующий синтаксис:

myFunction(значение аргумента1, значение аргумента2);

В этом примере предполагается, что объявление функции и ее вызов находятся на одном и том же монтажном столе. Каждая функция, подобно переменным и объектам, находится на том или ином монтажном столе – а именно, на том, где она объявлена. Чтобы вызвать функцию с определенного монтажного стола, необходимо указать путь, например:

_root.clip1.clip2.myFunction();

В этом упражнении мы создадим кнопку Power на пульте дистанционного управления телевизором. Этой кнопкой – с использованием функции – будет включаться и выключаться наш Flash-телик.

Совет Вызов функции можно организовать динамически, используя значение переменной. Например, так: _root.[aVariableName]() ;. Если aVariableName имеет значение " sayHello ", то получится вызов функции _root.sayHello();.

  1. Откройте файл television1.fla из папки Lesson05/Assets.

Общая структура фильма уже создана. В слое Actions мы будем размещать большую часть наших скриптов. В слое TV имеется экземпляр фильма-символа с именем tv, на его монтажном столе – три слоя: нижний слой (называется Television) – просто графика; слой над ним (Screen) содержит экземпляр фильма-символа screen, который, в свою очередь, содержит два слоя и два кадра, графическое содержание которых представляет разные "программы", которые можно будет смотреть, переключая каналы телевизора.

На основном монтажном столе имеется еще один слой – Remote, он содержит экземпляр фильма-символа remote. В нем вы найдете слой, содержащий большую часть изображений, составляющих пульт управления, в том числе экземпляр фильма-символа light, а также слой, содержащий кнопки пульта – все они в итоге будут содержать скрипты.

  1. Выделите кадр 1 слоя Actions на основном монтажном столе. Откройте панель Действия и введите следующий скрипт:
tvPower = false;
function togglePower () {
  if (tvPower) {
    newChannel = 0;
    tvPower = false;
  } else {
    tvPower = true;
    newChannel = 1;
  }
  tv.screen.gotoAndStop(newChannel + 1);
  remote.light.play();
}

В первой строке скрипта создается переменная tvPower, она будет использоваться для отслеживания текущего состояния телевизора: значение true означает, что он включен, false – выключен. Изначально телевизор должен быть выключен, поэтому tvPower присваивается false. Следующие семь строк представляют собой объявление функции togglePower() – эта функция при вызове будет включать или выключать телевизор. Этой функции не передаются никакие аргументы. Поскольку скрипт находится в кадре 1, переменная tvPower получает значение false и функция togglePower() объявляется после загрузки этого кадра (то есть сразу после старта фильма).

Совет Поскольку функции должны быть объявлены до их вызова, обычно все объявления функций помещают в кадр1, чтобы затем их можно было вызвать в любой момент.

В первой части функции используется оператор if, который анализирует текущее значение tvPower. Если в момент вызова функции значение переменной tvPower равно true (ТВ включен), то ей присваивается значение false (выключено), а переменной newChannelзначение 0; в противном случае ( else ) tvPower получает значение true, а newChannel = 1. Так с помощью оператора if мы меняем значение tvPower на противоположное при каждом вызове функции, при этом изменяя еще значение переменной newChannel – после выполнения этого оператора она получает значение 0 либо 1.

Затем функция отсылает экземпляр фильма-символа screen (он находится внутри экземпляра tv ) к кадру с номером newChannel + 1. К значению newChannel непременно следует добавить единицу, ведь эта переменная у нас может принимать значение 0, а во Flash кадра 0 быть не может! В итоге эта строка функции отсылает экземпляр фильма-символа screen к кадру 1 (изображающему пустой экран телевизора) либо к кадру 2 (показывает канал 1).

Завершается функция указанием проиграть фильм-символ light на пульте управления – огонек мигнет, показывая, что кнопка была нажата.

Теперь у нас на главном монтажном столе, в кадре 1, имеется функция. Однако, хотя она содержит несколько действий, ни одно из них не будет выполнено, пока функция не будет вызвана.

  1. Двойным щелчком на экземпляре фильма-символа remote (пульт управления) откройте его для редактирования на месте. Выделите кнопку Power и введите в панели Действия следующий скрипт:
on (release) {
  _root.togglePower();
}

Этот скрипт вызывает функцию togglePower(), созданную нами на предыдущем шаге. Необходимо отметить, что, поскольку эта функция находится на основном монтажном столе, при вызове мы должны указать путь к ней – _root.

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie). Несколько раз нажмите кнопку Power, чтобы проверить, как работает созданная нами функция включения/выключения телевизора.

Каждый раз при нажатии кнопки Power вызывается функция togglePower() и выполняются все действия, входящие в нее. Как и ожидалось, эти действия включают либо выключают телевизор.

  1. Закройте тестовый фильм и сохраните свою работу как television2.fla.

Мы только что создали функцию и применили ее! В следующем разделе мы разовьем идею и создадим более мощную и многоцелевую функцию.

< Урок 4 || Урок 5: 123 || Урок 6 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003