Дострочное пересдача экзамена
|
Использование условной логики
Программирование реакции на несколько условий
В этом упражнении мы будем запускать ракету. Для успешного запуска требуются определенные условия. Одним из важнейших факторов является погода, которая влияет на ускорение ракеты, а также на ее управляемость. В этом упражнении мы запрограммируем генерацию случайно выбранных погодных условий, на которые наша ракета будет так или иначе реагировать.
- Откройте файл rocketLaunch1.fla из папки Lesson09/Assets.
Этот файл содержит единственную сцену из семи слоев, названных в соответствии с их содержанием. Давайте рассмотрим элементы сцены.
Слой Weather содержит экземпляр фильма-символа, размер которого такой же, как у всего фильма. Этот фильм-символ представляет в нашей сцене изображение неба. На его монтажном столе имеется три метки: Sunny, Rainy и Night /. На каждой из этих меток кадры содержат соответствующую фоновую картинку: на метке Sunny – ясная погода, на Rainy небо затянуто тучами, на Night небо темное, ночное.
Слой Ground/Central Graphics содержит изображение стартового поля и гор на заднем плане. Кроме того, в этом слое находится экземпляр фильма-символа в виде маленькой красной мигающей точки, отмечающей место запуска на глобусе.
Слой Rocket содержит, само собой, нашу ракету – экземпляр фильма-символа под именем rocket. На монтажном столе этого клипа две метки: off и on. На метке on ракета изображена с хвостом пламени, на метке off – без.
Слой Control Panel содержит несколько элементов, из которых прежде всего бросается в глаза красная кнопка запуска – Launch. Она, между прочим, будет не только запускать ракету, но и возвращать сцену в исходное состояние после каждой попытки запуска. Ниже этой кнопки расположен экземпляр фильма-символа под названием thrustBoost – он представляет собой надпись "Thrusters". У этого клипа тоже имеется две метки, on и off. На метке on надпись отображается буквами большими и красными – стало быть, ускорители ракеты включены. Последний элемент этого слоя – текстовое поле, расположенное в правом нижнем углу сцены, имя экземпляра – weatherText. Здесь будет отображаться текстовая информация о текущем состоянии погоды.
Слой Status содержит экземпляр фильма-символа по имени status; на сцене вы видите его, как маленький кружок посреди "неба". Он так выглядит потому, что в его первом кадре отсутствует какая-либо графика. На монтажном столе этого фильма-символа три метки: off, abort и success. На метке off клип выглядит так, как сейчас – то есть никак. На метке abort появляется надпись "Launch Aborted" (запуск не удался); на метке success – надпись "Launch Successful" (успешный запуск). Таким образом, этот клип отображает сообщение об успехе или неудаче попытки запуска.
В слое Guides находятся две красные полоски – ракета должна пройти через пространство между ними, чтобы запуск считался успешным.
Слой Sound Clips содержит экземпляр фильма-символа под названием sounds; в проекте он тоже показан в виде маленького кружка, в районе левого верхнего угла сцены. На его монтажном столе имеются метки intro, launch, abort и success. В кадры каждой из этих меток помещен соответствующий звуковой клип, иллюстрирующий вступление, запуск, неудачу и успех. Скрипты, отсылающие этот фильм-символ к той или иной метке, обеспечат звуковое сопровождение нашего проекта.
Приступим к написанию скриптов для проекта.
- Откройте панель Действия, выделите экземпляр фильма-символа weather и присоедините к нему следующий скрипт:
onClipEvent (load) { randomWeather = random (3); if (randomWeather == 0) { conditions = "Sunny"; _root.rocket.noThrust = 3; _root.rocket.thrust = 6; } else if (randomWeather == 1) { conditions = "Rainy"; _root.rocket.noThrust = 2; _root.rocket.thrust = 4; } else { conditions = "Night"; _root.rocket.noThrust = 1; _root.rocket.thrust = 2; } }
Этот скрипт будет выполняться при загрузке данного экземпляра фильма-символа. Первым действием присваивается значение переменной randomWeather – случайно выбранное число (из трех возможных: 0, 1 или 2). После этого оператор if начинает анализировать значение randomWeather, чтобы присвоить нужные значения трем другим переменным. Если randomWeather имеет значение 0, то на текущем монтажном столе (этого фильма-символа) создается переменная conditions, и ей присваивается строковое значение "Sunny". Кроме того, создаются две переменные на монтажном столе фильма-символа rocket: одна называется noThrust, другая – thrust ; эти переменные получают значения 3 и 6 соответственно. Если же значение randomWeather не равно 0, то эта секция условного оператора игнорируется, и управление передается секции else if, которая проверяет значение randomWeather на равенство единице. Если условие выполняется, то создаются те же три переменные, но на этот раз они получают значения "Rainy", 2 и 4, соответственно. Если значение randomWeather не равно 1, то эта секция тоже игнорируется, и выполняются действия из секции else. Как вы помните, в секции else условного оператора помещаются действия, которые должны быть выполнены в том случае, если ни одно из условий предыдущих секций оператора не выполнено. У нас в секции else создаются все те же три переменные, только в этом случае они получают значения "Night", 1 и 2.
Переменной conditions мы вскоре воспользуемся для графического отображения на сцене различных погодных условий. Две другие переменные послужат для задания скорости движения ракеты (экземпляра rocket ) в зависимости от погоды.
- Добавьте в обработчик события load, сразу после последней секции оператора if, следующие строки:
gotoAndStop(conditions); _root.weatherText.text = "Weather: " + conditions;
Эти два действия будут выполнены сразу после завершения работы условного оператора if; оба они используют значение переменной conditions. Первое действие перемещает данный экземпляр фильма-символа к кадру с меткой, название которой содержится в переменной conditions. Если, например, conditions имеет значение "Rainy", экземпляр клипа перемещается к метке Rainy – кадру, который содержит изображение дождливой погоды. Второе действие создает надпись, отображаемую в текстовом поле weatherText, что в правом нижнем углу сцены. Пусть опять conditions имеет значение "Rainy", тогда в этом текстовом поле отобразится надпись "Weather: Rainy".
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.
Как только начнется воспроизведение фильма, будет загружен фильм-символ weather и выполнен скрипт, который мы только что написали. В зависимости от того, какое случайное число сгенерирует наш скрипт, на экране будут отображены те или иные погодные условия, а в правом нижнем углу экрана появится соответствующая надпись.
Примечание Если закрыть тестовый фильм, а затем вновь выполнить команду Управление > Проверить фильм, то погода на экране может оказаться уже иной – в результате генерации другого случайного числа.
- По-прежнему находясь в среде тестирования, выполните команду Отладка > Список переменных (Debug > List Variables).
Откроется окно Выход (Output), в котором будут перечислены все переменные, находящиеся на разных монтажных столах. Отметьте про себя значения переменных thrust и noThrust на монтажном столе rocket. Вскоре мы ими воспользуемся.
- Закрыв тестовый фильм, вернитесь в среду разработки и сохраните свою работу как rocketLaunch2.fla.
Мы продолжим работать с этим файлом в следующем упражнении.