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

Использование условной логики

< Урок 8 || Урок 9: 1234567 || Урок 10 >

Установление граничных условий

Со всевозможными граничными условиями мы сталкиваемся в жизни постоянно. Границы могут быть разными – физическими, финансовыми, могут даже быть установлены внутри нашего сознания; в конечном итоге всякая граница – просто обозначение предела чего-либо. Давайте возьмем какой-нибудь пример граничных условий в действии. Представьте, что вы ведете автомобиль. Линии разметки на дороге представляют собой границы, внутри которых должен оставаться наш автомобиль. Если мы слишком приблизились к левой линии (левая граница), мы поворачиваем руль вправо, чтобы удержать машину в пределах дорожной полосы; если приближаемся к правой линии, поворачиваем руль в противоположную сторону – условная логика в действии! Если записать алгоритм наших действий на ActionScript, получится нечто вроде:

if (car._x > leftOfRoad) {
  turnWheel ("right");
} else if (car < rightOfRoad) {
  turnWheel ("left");
}

Чтобы установить граничные условия во Flash, нужно задать некие пределы, и затем использовать их в операторе if, который будет проверять ограничиваемый элемент всякий раз, когда наступает событие, в результате которого он мог бы выйти за установленные границы. По ходу выполнения следующего упражнения этот процесс станет для вас яснее ясного.

Граничные условия используются во Flash в следующих ситуациях:

  • Для предотвращения превышения свойствами экземпляра фильма-символа ( x, y, alpha, xscale, yscale и т.п.) определенных значений
  • Для вызова действия (изменения значения свойства или метода) в ситуации, когда что-либо попадает внутрь установленных пределов или наоборот, выходит за пределы
  • Чтобы значения каких-либо данных не выходили за определенные пределы

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

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

Мы продолжаем работать с проектом, начатым в предыдущем упражнении.

  1. Откройте панель Действия, выделите одну из двух красных полос в верхней части сцены и введите такой скрипт:
onClipEvent (enterFrame) {
  if (_x < 0) {
    direction = "right";
  } else if (_x > 550) {
    direction = "left";
  }
  if (direction == "right") {
    _x = _x + 3;
  } else {
    _x = _x - 3;
  }
}

Очевидно, что обе красные полосы являются частью экземпляра фильма-символа, к которому мы и присоединяем этот скрипт. В скрипте использовано два оператора if, при помощи которых экземпляр перемещается влево и вправо. Скрипт привязан к обработчику события enterFrame, а это значит, что он будет выполняться 24 раза в секунду (такова частота кадров нашего фильма).

В первом условном операторе анализируется позиция данного клипа, с тем, чтобы выяснить, не вышел ли он за левую или правую границу. Если горизонтальная координата экземпляра меньше 0 (то есть его центр ушел за левый край сцены), переменной direction присваивается значение "right". В противном случае, если горизонтальная координата больше 550 (центр клипа вышел за правый край сцены), direction получает значение "left". Таким образом, значение переменной direction меняется только в том случае, если произошел выход за одну из границ. Значит, экземпляр клипа будет постоянно двигаться, как предписывает ему второй оператор if. А он говорит, что если direction имеет значение "right", то горизонтальная координата экземпляра увеличивается на 3 – клип перемещается вправо. В противном случае ( else ; если direction имеет значение "left" ) горизонтальная координата экземпляра у меньшается на 3, и клип перемещается влево. Таким образом, в результате выполнения 24 раза в секунду данного скрипта – двух условных операторов – красные полосы будут постоянно находиться в движении, однако не смогут выйти за установленные пределы.

Примечание При программировании граничных условий важно определить, какой обработчик события лучше использовать для анализа положения элемента условными операторами. Использовать событие enterFrame не всегда выгодно; например, если нужно отслеживать положение экземпляра фильма-символа при перетаскивании его мышью, то для этого идеально подойдет обработчик события mouseMove.

Итак, наши два условных оператора работают совместно: направление движения красных полос зависит от того, какая граница была пересечена перед этим (в тот момент переменная direction получила значение "left" либо "right" ) – полосы движутся в направлении противоположной границы. Наконец, они доходят до этой границы, пересекают ее, и процесс повторяется в противоположном направлении. Проще говоря, если direction имеет значение "right", то экземпляр движется вправо до тех пор, пока не пересечет правую границу, в этот момент direction получает значение "left", и начинается обратное движение.


Примечание Начальное положение на сцене нашего экземпляра – на 1 пиксель левее левой границы. Таким образом, при первом выполнении скрипта direction получит значение "right", и экземпляр будет двигаться вправо.

  1. Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.

Как только началось воспроизведение фильма, красные полосы пришли в движение. Дойдя до какого либо из заданных нами ограничителей, они начинают двигаться в противоположную сторону.

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

Мы продолжим работать с этим файлом в следующем упражнении.

< Урок 8 || Урок 9: 1234567 || Урок 10 >
Салтанат Бектегенова
Салтанат Бектегенова

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

 

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

Вот задание:

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

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