Дострочное пересдача экзамена
|
Использование условной логики
Выявление столкновений объектов
Часто во 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 при движении натолкнется на одну из красных полос, ограничивающих наше "окно запуска". Если ракета наткнется на одну из них, запуск будет считаться неудавшимся, если пройдет между ними – запуск успешный.
- Откройте файл rocketLaunch5.fla из папки Lesson09/Assets.
Мы продолжаем работать с проектом, начатым в предыдущих упражнениях.
- Двойным щелчком на одной из красных полос в верхней части сцены откройте этот клип для редактирования на месте.
Само собой, обе красные полосы входят в состав этого экземпляра клипа. Однако в то же время обе полосы сами являются экземплярами фильма-символа (один экземпляр перевернут). А раз так, мы можем запрограммировать реакцию на столкновение этих экземпляров с экземпляром клипа 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, в результате воспроизводится звукозапись, и ллюстрирующая неудачный исход запуска.
- Не закрывая панель Действия, выделите вторую красную полосу и присоедините к ней такой же скрипт, что и к первой.
Если экземпляр rocket встретится с этим экземпляром, тоже будут выполнены действия, описанные на предыдущем шаге.
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.
Теперь наш проект функционирует полностью! Нажмите кнопку Launch, но сразу не отпускайте – посмотрите, не произойдет ли чего при этом. Отпустив кнопку, запустите ракету. Примените ускорители, стараясь, чтобы ракета прошла в промежуток между двумя красными полосами. Если получится, появится сообщение об успешном запуске, если нет – о неудаче.
- Закрыв тестовый фильм, вернитесь в среду разработки и сохраните свою работу как rocketLaunch6.fla.
Этот урок завершен.
Теперь, когда вы умеете использовать в скриптах условную логику, сюжеты ваших фильмов могут стать разветвленными, вплоть до того, что каждый пользователь сможет пройти по фильму своим, уникальным, путем.