
- •Время выполнения
- •Управление последовательностью выполнения скриптов
- •Оператор if.
- •Оператор if/else if
- •Оператор if/else
- •Другие условные операторы
- •Выбор условий
- •Рограммирование реакции на несколько условий
- •Файл-пример rocketLaunch1.Fla из папки Lesson09/Assets.
- •Установление граничных условий
- •Код для одной из двух красных полос в верхней части сцены:
- •Включение/Выключение
- •После предыдущего скрипта поместите следующий:
- •Скрипт кнопки Launch:
- •После предыдущего скрипта добавьте следующий:
- •Реакция на действия пользователя
- •Скрипт для-символа rocket:
- •После предыдущего скрипта добавляется следующий:
- •Выявление столкновений объектов
- •Скрипт для одной из красных полос:
- •Для второй красной полосы добавляется такой же скрипт, как и к первой.
После предыдущего скрипта добавляется следующий:
onClipEvent (keyUp) {
if (!key.isDown(key.SPACE)) {
speed = noThrust;
_root.thrustBoost.gotoAndStop ("off");
}
}
Скрипт по своему синтаксису похож на предыдущий, только работает наоборот. Прежде всего, он выполняется в том случае, если клавиша, нажатая на клавиатуре, отпущена. Условный оператор проверяет, чтобы клавиша "пробел" была не нажата. Если это так, выполняются два действия. Первое вновь присваивает переменной speed значение noThrust (начальное значение). Второе действие приказывает экземпляру фильма-символа thrustBoost перейти к кадру с меткой off, где надпись "Thrusters" изображена так, как было до включения ускорителей.
Выявление столкновений объектов
Часто во Flash-приложениях, особенно в играх, требуется выявлять ситуации, когда два объекта "встречаются" между собой на сцене. Здесь тоже находит применение условная логика.
Для обнаружения столкновения двух объектов (экземпляров фильмов-символов) в ActionScript имеется метод hitTest() объекта MovieClip. Используя этот метод в соединении с условной логикой, вы сможете запрограммировать действия, которые должны быть выполнены в случае встречи одного фильма-символа с другим. Взгляните на следующий скрипт:
onClipEvent (enterFrame) {
if (hitTest ("wallOfCotton")) {
pain = 0;
} else if (hitTest ("wallOfCardboard")) {
pain = 5;
} else if (hitTest ("wallOfBricks")) {
pain = 10;
}
Если экземпляр фильма-символа, к которому присоединен этот скрипт, встретится на сцене с экземпляром под названием wallOfCotton, переменная pain получает значение 0. Если встретится с wallOfCardboard, pain получит значение 5. Наконец, если столкновение будет с экземпляром wallOfBricks, pain получит значение 10. Как видите, в применении метода hitTest() нет ничего сложного.
Далее мы воспользуемся методом hitTest() совместно с условной логикой для выполнения определенных действий, если экземпляр rocket при движении натолкнется на одну из красных полос, ограничивающих наше "окно запуска» – запуск будет считаться неудавшимся, если пройдет между ними – запуск успешный.
Скрипт для одной из красных полос:
onClipEvent (enterFrame) {
if (hitTest("_root.rocket")) {
_root.rocket._x = 98;
_root.rocket._y = 352;
_root.rocket.launch = false;
_root.rocket.gotoAndStop ("off");
_root.status.gotoAndStop ("Abort");
_root.sounds.gotoAndPlay ("abort");
}
}
Этот скрипт помещен в обработчик события enterFrame, а значит, оператор if будет проверять условие 24 раза в секунду. Условие состоит в том, чтобы данный экземпляр столкнулся с экземпляром фильма-символа rocket (_root.rocket). Если это произошло, выполняются действия в теле оператора. Первые два возвращают ракету на ее начальную позицию. Следующее действие присваивает переменной launch (на монтажном столе экземпляра rocket) значение false, что приводит к прекращению движения ракеты. Следующее действие перемещает экземпляр rocket к кадру с меткой off (в этом кадре ракета изображена без огненного хвоста). Затем экземпляр клипа status перемещается к кадру с меткой abort – на экране отображается сообщение о том, что миссия закончилась неудачей. И, наконец, экземпляр клипа sounds отсылается к кадру с меткой abort, в результате воспроизводится звукозапись, и ллюстрирующая неудачный исход запуска.