В данном уроке мы расскажем о том, почему изучить программирование на

Мы с вами спланируем, создадим и протестируем интерактивную систему оплаты счетов за электричество
На выполнение этого урока требуется примерно один час.
В начале своего становления Macromedia
Сегодня не вызывает сомнений такой факт: для
Вдобавок ко всем этим преимуществам нельзя не отметить тот факт, что
Как же работает
on (release) {
//задается стоимость кружки (пива?)
mugCost = 5.00;
//задается торговая наценка в процентах
taxPercent = .06;
//определяется размер наценки в долларах
totalTax = mugCost * taxPercent;
//определяется общая стоимость сделки
totalCost = mugCost + totalTax;
//выводится сообщение
myTextBox.text = "Общая стоимость вашей покупки " + totalCost;
//переход экземпляра фильма-символа cashRegister к кадру 50
cashRegister.gotoAndPlay (50);
}
Возможно, на первый взгляд все это смахивает на какую-то латынь, но, познакомившись ближе с некоторыми из этих элементов, вы вряд ли сочтете, что это все слишком сложно.
Примечание Существуют еще и другие элементы скриптов (например, объекты, функции, циклы, свойства и методы), которые мы также подробно рассмотрим в этом курсе.
Это нечто, происходящее в ходе воспроизведения фильма, который запускает выполнение скрипта. В нашем примере событие, запускающее скрипт – on (. Это значит скрипт присоединенный к этой кнопке, будет выполнен, как только кнопка будет отпущена ( ) после нажатия. Всякий скрипт запускается событием, а событий таких в вашем фильме может быть множество – и нажатия на кнопки, и завершение проигрывания звукозаписи, и многое другое.
Они формируют сердце скрипта; обычно под "действием" подразумевается всякая строка, содержащая команду, инструкцию для
Вот пара примеров действий из приведенного выше примера скрипта:
mugCost = 5.00; cashRegister.gotoAndPlay (50);
Вообще говоря, действия – это основная масса строк, составляющих скрипт; часто они заключены в фигурные скобки ( { } ) и почти всегда завершаются точкой с запятой ( ; – см. далее).
Они обозначаются различными символами ( =, <, >, +, -, *, и т.д.) и означают различные способы взаимодействия двух элементов скрипта между собой. Взгляните на следующие примеры:
taxPercent = .06; присваивает значение .06 переменной с именем taxPercent
amountA < amountB проверяет, является ли amountA меньшим, чем amountB
value1 * 500 умножает value1 на 500
К ним относятся слова, зарезервированные в синтаксисе on – ключевое слово, оно используется в скрипте исключительно для указания на событие, запускающее скрипт, например, on(press), on( и так далее. Употребляйте в скриптах ключевые слова только для тех целей, для которых они предназначены, иначе в результате получите лишь сообщение об ошибке. К другим ключевым словам относятся: break, case, continue, delete, do, else, for, function, if, in, instanceOf, new, return, switch, this, typeOf, var, void, while и with.
Динамический скрипт в процессе выполнения постоянно создает, использует или обновляет всевозможные данные. Наиболее употребительная разновидность "частицы" данных – переменная: это некоторая частица данных, имеющая собственное уникальное имя. Создав переменную и присвоив ей значение, вы можете затем получить доступ к этому значению в любом месте скрипта, просто подставив
В нашем примере мы присвоили переменной с именем mugCost значение 5.00. Затем в том же скрипте мы, используя имя этой переменной, ссылались на значение, которое она содержит.
Вообще, все, что заключено между открывающей и закрывающей фигурными скобками, есть действие или набор действий, которые должны быть выполнены при запуске данной самостоятельной части скрипта. Можно представить себе это так: "В результате этого – {делать это}". Например:
on (release) {
//задается стоимость кружки
mugCost = 5.00;
//задается торговая наценка в процентах
taxPercent = .06;
}
Точка с запятой, стоящая в конце строки скрипта, отделяет одно действие от другого, подобно тому, как запятыми разделяются части сложного предложения. В следующем примере мы имеем шесть отдельных действий, разделенных знаком точки с запятой:
mugCost = 5.00; taxPercent = .06; totalTax = mugCost * taxPercent; totalCost = mugCost + totalTax; myTextBox = "The total cost of your transaction is " + totalTax; cashRegister.gotoAndPlay (50);
Точки ( .) имеют в скриптах два применения. Во-первых, они используются при указании пути к конкретному монтажному столу. Например, _root.usa.indiana.bloomington указывает на фильм-символ с именем "bloomington", содержащийся в фильме-символе "indiana", который, в свою очередь, содержится в фильме-символе "usa", находящемся на основном монтажном столе ( _root ).
Во-вторых: поскольку
колесо._вращение = 90;
Видите, точка отделяет ), мы должны написать:
колесо.play()
И вновь точка отделяет
Они используются в cashRegister начать воспроизведение с кадра 50:
cashRegister.gotoAndPlay (50);
Если заменить число 50 в скобках на 20, то смысл задачи не изменится (переход к определенному кадру), но выполнена она будет в соответствии с новым значением. Таким образом, при помощи скобок мы велим действию работать с тем, что заключено внутри них.
Кавычки указывают на текстовые данные. Поскольку сам скрипт является текстом, кавычки помогают программе разобраться, где инструкции или данные, а где обычные слова. Например, Derek (без кавычек) будет означать имя, например, переменной. А вот " Derek " будет означать не что иное, как слово Derek.
В скрипте это строки, начинающиеся двумя косыми чертами ( // ). Выполняя скрипт,
Они на самом деле абсолютно не нужны, однако использовать пробелы и отступы в синтаксисе все же стоит. Например,
on(release){
mugCost = 5.00;
}
Будет выполнено точно так же, как и
on(release) {
mugCost = 5.00;
}
Однако, согласитесь, что с отступами код читать намного удобнее. Правилом хорошего тона в программировании считается делать отступ перед каждой из строк, заключенных в фигурные скобки и представляющих собой блок кода, который состоит из команд, выполняемых подряд, в одно и то же время. При этом одни блоки могут находиться внутри других блоков, и тогда у них будет двойной отступ – с этим вы встретитесь в следующих упражнениях. Собственно, вам-то об этом особенно беспокоиться не придется – во
Как правило, в скрипте игнорируются и пробелы. Вот, например, такая строка:
totalCost = mugCost + totalTax ;
Выполняться она будет так же, как и
totalCost=mugCost+totalTax;
Одни программисты полагают, что с пробелами код лучше читается, а другие считают, что расставлять еще и пробелы слишком долго. Решайте сами. Но есть в отношении пробелов два правила: во-первых, имена переменных не могут содержать пробелы, а во-вторых – пробел нельзя ставить между именем объекта и связанным с ним свойством или методом. Такое написание будет правильным:
myObject.propertyName
А такое – нет:
myObject. propertyName
Приступая к созданию проекта, который будет работать под управлением
Многие решения следует принять заранее, даже прежде, чем открыть
Это самый важный вопрос в процессе планирования. Ваш ответ на него должен быть как можно более ясным и информативным, однако избегайте слишком вдаваться в детали.
Что касается проекта, созданием которого мы займемся в этом упражнении, то мы собираемся создать сцену, которая будет служить интерфейсом для системы оплаты счетов за электричество. Мы хотим, чтобы сумма счета загружалась в фильм из внешнего источника – текстового файла. Затем мы позволим пользователю ввести в текстовое поле сумму, которую он хочет заплатить. При нажатии кнопки сумма, которую пользователь платит, будет сравниваться с суммой, которую он должен, и на экране будет отображаться визуальная и текстовая информация (некое сообщение), в зависимости от результата – переплатил пользователь, недоплатил или внес ровно столько, сколько нужно. Как только пользователь отпустит кнопку, все визуальные и текстовые элементы сцены должны вернуться к своему первоначальному состоянию. Скрипт, который будет все это выполнять, и станет главным скриптом проекта.
Иными словами, сколько переменных нужно для функционирования приложения? В нашем случае нужна сумма счета за электричество – $60. Кроме того, мы должны отслеживать разность между этой суммой и суммой, уплаченной пользователем, чтобы мы могли вывести эту разницу в наших сообщениях.
В нашем проекте первым делом должна быть установлена сумма счета за электричество. Ведь главная
Теперь надо подумать о том, как эти данные – сумма счета – попадут в фильм. Мы можем поместить их в фильм в процессе создания, а можем загрузить из внешнего источника (например, с сервера или из файла) уже в процессе проигрывания фильма. Для нашего проекта мы предпочтем последнее: применим простенький скрипт для загрузки в фильм текстового файла, содержащего сумму счета ($60). Текстовый или иной файл, из которого в фильм загружаются данные, называется источником данных.
В нашем случае ответ очевиден: нажатие кнопки. Вообще же во
Как только будет запущен основной скрипт нашего фильма, должно быть выполнено сравнение суммы, введенной пользователем, с суммой которую он должен, чтобы определить, заплатил ли он слишком много, слишком мало или ровно. Ответ на этот вопрос будет определять то, какое сообщение будет выведено на экран, и что вообще будет происходить на экране.
Наша сцена будет состоять из нескольких элементов, некоторым из которых нужно будет дать имена, чтобы
Также нам требуется owed. Еще нам нужно текстовое поле для ввода, в котором пользователь будет указывать сумму, которую он желает заплатить; это поле назовем paid. Кроме того, необходимо еще одно динамическое поле, в котором будет выводиться сообщение, генерируемое скриптом; это поле пусть называется message. И наконец, нужно "сообщение" визуальное – мы добавим на сцену большую электролампочку. Сначала, когда пользователь еще ничего не заплатил, она будет "погашена". Если пользователь заплатит точную сумму по счету, лампочка засветится, а если он переплатит – лампочка раскалится. Лампочка эта будет представлять собой фильм-символ с именем light.
Каким угодно способом – в

Став мастером
Теперь, когда у нас есть вся нужная информация, а также эскизная раскадровка нашего проекта, давайте приступим к его сборке.

В первой части нашего упражнения мы создадим источник данных, загружаемых в наш фильм при его воспроизведении. Для нашего проекта этот источник данных содержит значение, представляющее собой сумму счета за электричество. electricBill и присвоит ей значение 60. Значение этой переменной будет использоваться в нашем проекте для нескольких целей.
Примечание
Цель данного курса состоит в том, чтобы обучать
Основной монтажный стол нашего проекта содержит пять слоев, в каждом из которых по 10 кадров. Слои названы так, чтобы их содержимое было очевидно с первого взгляда. Слой Actions (действия) в данный момент пуст.
Поскольку данное текстовое поле будет отображать сумму счета за электричество (долга), мы назвали его owed.

Примечание Во
Повнимательнее взглянув на инспектор Параметры, вы увидите, что это текстовое поле относится к типу Input Text, то есть поле для ввода. Оно будет использоваться для получения информации от пользователя, а именно – суммы денег, которую он желает внести в счет оплаты. В это текстовое поле мы ввели ноль (0), эта сумма будет отображаться в нем в начале фильма.
Данное текстовое поле будет отображать сообщения для пользователя, в зависимости от того, сколько он решит заплатить.
Поскольку наш скрипт будет воздействовать на этот экземпляр фильма-символа, мы должны дать экземпляру имя, чтобы можно было указать на него в скрипте. На монтажном столе данного фильма-символа имеется три кадра – с метками Off, On и Hot ; они будут определять вид фильма при различных условиях. Изначально на экране появится кадр Off.

В нашем скрипте (который мы вскоре напишем) мы предусмотрим, чтобы фильм-символ оставался на кадре с этой меткой, если пользователь заплатит меньше, чем он должен (не заплатил – сиди без света). Если пользователь заплатит ровно столько, сколько должен, мы переместим воспроизведение монтажного стола этого клипа к кадру с меткой On – чтобы свет включился. Если же пользователь заплатит больше, чем нужно, мы перейдем к кадру с меткой Hot, и лампочка прямо таки раскалится.
Теперь, когда все элементы в нашей сцене поименованы, можно приступить к написанию скрипта, и начнем мы с того, что дадим указание нашему фильму загрузить данные из внешнего текстового файла.
loadVariablesNum ("Electric_Bill.txt", 0);
Примечание Мы советуем оставить панель Действия в экспертном режиме, поскольку так будет проще всего вводить большинство скриптов, описанных в данном курсе.
Данная строка скрипта делает единственную вещь: загружает переменные из файла Electric_Bill.txt (который мы создали ранее) в Уровень 0, то есть в фильм, с которым мы сейчас работаем. Файл Electric_Bill.txt содержит единственную переменную с именем electricBill, имеющую значение 60. Таким образом, после выполнения этой строки программного кода в нашем фильме появится переменная electricBill со значением 60. Весь процесс заключается просто в переносе переменных из текстового файла в наш фильм.
loadVariablesNum() – это действие. Мы заставили его работать особым способом, указав в скобках уникальные значения параметров. Данное действие имеет два параметра, разделяемых запятой. Первый указывает на внешний источник, содержащий данные; второй – на монтажный стол, в который должны быть загружены данные. Впоследствии вы увидите, что таким же способом осуществляется указание параметров и для многих других элементов
Мы поместили этот скрипт в кадр 1 нашего фильма, стало быть, он будет выполнен, как только начнется воспроизведение фильма – это важно, поскольку фильм должен заранее получить значение переменной electricBill для скрипта, который будет организовывать работу кнопки-выключателя Light Switch.
owed.text = electricBill; stop ();
Итак, кадр 1 содержит действие, загружающее переменные из файла Electric_Bill.txt. Пока происходит загрузка, воспроизведение монтажного стола фильма продолжается, а когда он достигает кадра 10, выполняются действия, добавленные нами только что.
Первое действие устанавливает значение, отображаемое в экземпляре текстового поля owed, равным значению electricBill. Как вы помните, имя owed мы дали экземпляру текстового поля, расположенному в левом верхнем углу нашего фильма, а electricBill – переменная со значением 60, загружаемая из нашего текстового файла. Таким образом, данная строка скрипта приведет к тому, что в текстовом поле owed будет отображено число 60.

Как мы уже упоминали, во owed. Обратите внимание на точку (.), разделяющую
Кроме того, первая строка демонстрирует использование оператора между двумя элементами – свойством объекта и переменной (ее значением). Здесь это electricBill свойству text экземпляра текстового поля owed.
Последнее действие скрипта попросту останавливает воспроизведение монтажного стола. Поскольку это действие не требует каких-либо параметров, скобки остались пустыми.
Совет Как вы можете заметить, между кадром, содержащим действие electricBill, имеется промежуток из нескольких кадров. Это нужно для того, чтобы текстовый файл успел действительно загрузиться. Если бы мы попытались воспользоваться переменной electricBill до того, как завершится загрузка текстового файла, то столкнулись бы с проблемами. Фактически наш фильм вел бы себя так, словно текстовый файл и вовсе не загружался. "Прокладка" из кадров, созданная нами – один из способов предупреждения такой проблемы. О других способах мы поговорим в следующих уроках.
Теперь давайте назначим скрипт для нашей кнопки Light Switch.
on (press) {
amountPaid = Number(paid.text);
amountOwed = Number(owed.text);
}
Первое, на что следует обратить внимание – этот скрипт будет выполняться при нажатии кнопки, к которой он присоединен. Следом за указанием этого события идет открывающая фигурная скобка ({), две строки скрипта, затем закрывающая фигурная скобка (}). Эти фигурные скобки как бы говорят: "Эти два действия выполнить в результате нажатия кнопки". Скрипт выполняет две вещи: во-первых, создается переменная с именем amountPaid и ей присваивается значение, равное тому, что отображено в экземпляре текстового поля paid – только с помощью одного трюка. На самом деле все, что введено в текстовое поле, рассматривается как текст. Поэтому, хотя значение 100 выглядит в текстовом поле как число, оно считается текстом (состоящим из символов 1, 0 и 0, или "100" в кавычках), а не как число 100 (без кавычек).
Примечание
Наверное, вы уже поняли, что функция Number() – это специальный инструмент, позволяющий преобразовать текстовое значение в числовое. Текст, который вы хотите преобразовать, следует поместить в скобки в качестве параметра этой функции. Например:
myNumber = Number("945");
Такая команда преобразует текст "945" в число 945 (без кавычек) и присвоит это числовое значение переменной myNumber. В нашем скрипте мы применили функцию Number() и поместили в скобки ссылку на текстовое значение, которое нужно преобразовать. Таким образом, если пользователь введет в поле paid "54" (это будет текст), то, благодаря функции Number, переменной amountPaid будет присвоено значение 54 – числовое.
Примечание Функция Number() имеет свои ограничения: с ее помощью можно преобразовать только такой текст, где на первом месте стоит цифра. Например, Number("dog") в результате выдаст (not a number – не число), поскольку преобразование невозможно.
Следующая строка нашего скрипта выполняет точно такую же операцию, только здесь переменной amountOwed присваивается преобразованное в число значение, отображенное в экземпляре текстового поля owed. Вы помните, что это текстовое поле показывает сумму счета за электричество, то есть "60". Так что, после преобразования, amountOwed получит значение 60.
Причина, по которой нам приходится преобразовывать значения текстовых полей, состоит в том, что далее в нашем скрипте нужно будет использовать их для математических вычислений – а это значит, что нам нужны числа, а не текст.
Подведем итог. При нажатии кнопки текстовые значения, отображенные в текстовых полях paid и owed, преобразовываются в числа. Эти числовые значения присваиваются, соответственно, переменным amountPaid и amountOwed. Эти переменные будут использоваться в скрипте в дальнейшем.
if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы недоплатили " + difference + " долларов.";
} else if (amountPaid > amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Hot");
message.text = "Вы переплатили " + difference + " долларов.";
} else {
light.gotoAndStop ("On");
message.text = "Вы оплатили счет полностью.";
}
Поскольку мы поместили эти строки внутри фигурных скобок события on(press), они также будут выполняться при нажатии кнопки.
Эта порция скрипта делится точно на три части, обозначенные такими строками:
if (amountPaid < amountOwed) else if (amountPaid > amountOwed) else

Эти три строки представляют собой серию условий, которые скрипт при выполнении должен проанализировать. Сами условия, подлежащие анализу, указаны в скобках. Под каждой из этих строк (в фигурных скобках) имеется по несколько строк с отступом; они представляют действия, которые должны быть выполнены, если то или иное условие соответствует истине. Вот как это работает:
Когда кнопка нажата, наш скрипт должен определить, какую сумму оплаты ввел пользователь – меньшую, большую, или равную сумме счета. Это и есть три условия в нашем скрипте. Давайте рассмотрим первое, которое выглядит так:
if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы не оплатили " + difference + " dollars.";
}
В первой строке для сравнения значений двух переменных использован оператор "меньше, чем" (<). Первая строка переводится на человеческий язык так: "Если (If) сумма оплаты, введенная пользователем ( amountPaid ) меньше, чем сумма счета ( amountOwed ), предпринять действия, перечисленные ниже". Действия эти будут выполнены лишь в том случае, если условие соответствует истине. Поэтому этот набор действий заключен в фигурные скобки. Первое действие создает переменную с именем difference и присваивает ей значение amountOwed минус amountPaid. Если, например, пользователь ввел сумму 40, difference получит значение 20 ( amountOwed - amountPaid, или 60 – 40). Важно отметить, что все вычисления в правой части выражения (правее знака =) выполняются до того, как полученный результат будет присвоен элементу в левой части. Следующая строка указывает экземпляру фильма-символа light перейти к кадру с меткой Off и остановиться – поскольку пользователь недоплатил по счету, свет остается выключенным. Последняя строка генерирует сообщение, отображаемое в текстовом поле message.
Сообщение конструируется прямо в скрипте. Обратите внимание, что в этой строке использована переменная difference: Значение difference вставлено в середину данного сообщения, между двумя секциями текста, заключенного в кавычки и знаками "плюс". Если, например, difference имеет значение 20, получится такое сообщение:
"Вы недоплатили 20 долларов."
Как вы помните, все, что заключено в кавычки, считается обычным текстом. Поскольку слово difference в кавычки не заключено, text текстового поля message.
Если введенная пользователем сумма не меньше, чем сумма счета, то вся эта часть скрипта игнорируется, и начинается анализ следующей части. А она выглядит так:
else if (amountPaid > amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Hot");
message.text = "Вы переплатили " + difference + " dollars.";
}
Первая строка означает: "Иначе, если ( else if ) пользователь ввел сумму оплаты, большую, чем сумма счета, предпринять действия, перечисленные ниже". Выполняемые здесь действия – почти те же, что и в предыдущей части, лишь с двумя небольшими (но важными) отличиями. Во-первых, экземпляр фильма-символа light переходит к кадру с меткой Hot, который представляет лампочку, раскалившуюся от лишней
else {
light.gotoAndStop ("On");
message.text = "Вы оплатили счет полностью.";
}
Как видите, здесь уже не ставится вопрос, больше ли amountPaid, чем amountOwed или меньше (как было в предыдущих двух секциях). Скрипту уже незачем анализировать ситуацию, когда пользователь ввел сумму, точно соответствующую счету – дело в том, что эта секция кода будет выполнена лишь в том случае, если ни первая, ни вторая "не прошли проверку".
Итак, при нажатии кнопки выполняется только одна из этих трех секций кода. В результате на экране появляется определенный кадр фильма-символа light, а в текстовом поле message отображается соответствующее сообщение.
После того, как кнопка Light Switch будет отпущена, элементы нашей сцены должны вернуться в то состояние, в котором они находились при начале воспроизведения фильма. Давайте запрограммируем это.
on (release) {
light.gotoAndStop ("Off");
message.text = "";
}

Данный скрипт выполняется, как только кнопка отпущена. Он перемещает экземпляр фильма-символа light к кадру с меткой Off и стирает все из текстового поля message, возвращая эти элементы сцены к первоначальному состоянию.
Мы используем этот файл в следующем упражнении этого урока.
Было бы наивно полагать, что каждый скрипт сразу же заработает так, как планировалось. Ведь, независимо от того, насколько хорошо вы знакомы с
Это файл, в который мы внесли изменения в предыдущем упражнении. В этом упражнении мы протестируем проект на функциональность при помощи
Данная команда создает временную, но полнофункциональную экспортированную версию вашего фильма и воспроизводит ее в среде тестирования
Совет Старайтесь привлекать к тестированию проекта как можно больше своих друзей и коллег. Тем самым вы сильно повысите шансы проверить все возможные сценарии взаимодействия пользователя с фильмом и выявить все ошибки.
light ) останется выключенной.light должен "раскалиться" (его состояние в кадре с меткой Hot). как мы сказали, так должно случиться. На самом же деле мы получим сообщение, гласящее, что мы переплатили не 38 долларов, а –38! Что ж, отметим эту ошибку и продолжим тестирование.light перейдет во "включенное" состояние. Несомненная ошибка; отмечаем ее и продолжаем тестирование.Совет Иногда, найдя при тестировании сложного проекта ошибку, лучше сразу прервать тестирование и исправить ее (а не пытаться выявить все ошибки с тем, чтобы исправить их разом). Ведь пытаясь исправить дефект программы, вы можете сделать новую ошибку. Таким образом, в результате попытки исправления сразу всех ошибок вы можете получить несколько новых. Так лучше уж сконцентрироваться на исправлении одной ошибки, чтоб не пришлось, окончательно запутавшись, возвращаться к сохраненной ранее версии фильма.
Итак, мы выяснили, что наш проект содержит три дефекта:
Теперь давайте подумаем, чем вызваны эти дефекты. В первом случае, как нам известно, числовое значение difference, отображаемое в сообщении, вычисляется в скрипте. Кроме того, мы знаем, что проблема возникает лишь тогда, когда пользователь платит больше, чем нужно по счету. Стало быть, проблема заключается в способе вычисления difference, когда пользователь переплачивает по счету. Надо будет пересмотреть эту часть скрипта.
Что касается двух других ошибок, то дело вот в чем. Мы запрограммировали различные действия в зависимости от того, сколько заплатил пользователь. Однако мы забыли предусмотреть возможность, когда пользователь вообще ничего не вводит либо вводит текст – в таких случаях реакция нашего проекта вызывает просто смех. Надо будет внести в скрипт небольшое дополнение на такой случай.

Просмотрев секцию скрипта, определяющую поведение фильма в случае, когда amountPaid больше, чем amountOwed, мы обнаруживаем, что difference вычисляется путем вычитания amountPaid из amountOwed. Вот отсюда и проблема. Если пользователь платит 84 доллара, то difference будет вычислена как 60 – 84 ( amountOwed минус amountPaid ). Вычитание большего числа из меньшего дает отрицательный результат. Для исправления этого дефекта мы просто переставляем местами в этой строке amountOwed и amountPaid. Теперь меньшее число вычитается из большего, и мы получаем положительный результат.
Примечание Такую же строку в другой части скрипта изменять не нужно, поскольку та секция выполняется только в том случае, если пользователь платит меньше, чем нужно, и в этом случае значение difference вычисляется правильно.
Дополнение:
if (isNaN (amountPaid)) {
message.text = "Следует ввести сумму оплаты в долларах. Попробуйте еще раз.";
}
Изменение:
} else if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы недоплатили " + difference + " долларов.";
}
Как видите, после этой модификации первое проверяемое условие стало вторым. А первым теперь будет проверяться новое условие.

Добавленная секция предусмотрена на случай, если пользователь введет текст или вообще ничего не введет. Скрипт гласит, что если при нажатии кнопки Switch значение amountPaid не является числом ( isNaN ), то в сцене ничего не менять, но вывести сообщение, требующее, чтобы пользователь ввел правильное, числовое значение. Данная секция скрипта выполняется, если введенное значение не может быть преобразовано в числовое либо поле оставлено пустым. Функция isNan() – специальный инструмент
Примечание Далее в курсе вы найдете подробное описание функции isNaN().
Это условие мы поставили самым первым, как важнейшее, которое следует проверить прежде всего при выполнении скрипта. Если пользователь введет числовое значение, эта секция скрипта будет проигнорирована, и выполнение программы продолжится так, как было описано ранее.
На сей раз фильм должен работать правильно при всех обстоятельствах.
Поздравляем – первый урок завершен!
В данном уроке мы расскажем о том, почему изучить программирование на

Мы с вами спланируем, создадим и протестируем интерактивную систему оплаты счетов за электричество
На выполнение этого урока требуется примерно один час.
В начале своего становления Macromedia
Сегодня не вызывает сомнений такой факт: для
Вдобавок ко всем этим преимуществам нельзя не отметить тот факт, что
Как же работает
on (release) {
//задается стоимость кружки (пива?)
mugCost = 5.00;
//задается торговая наценка в процентах
taxPercent = .06;
//определяется размер наценки в долларах
totalTax = mugCost * taxPercent;
//определяется общая стоимость сделки
totalCost = mugCost + totalTax;
//выводится сообщение
myTextBox.text = "Общая стоимость вашей покупки " + totalCost;
//переход экземпляра фильма-символа cashRegister к кадру 50
cashRegister.gotoAndPlay (50);
}
Возможно, на первый взгляд все это смахивает на какую-то латынь, но, познакомившись ближе с некоторыми из этих элементов, вы вряд ли сочтете, что это все слишком сложно.
Примечание Существуют еще и другие элементы скриптов (например, объекты, функции, циклы, свойства и методы), которые мы также подробно рассмотрим в этом курсе.
Это нечто, происходящее в ходе воспроизведения фильма, который запускает выполнение скрипта. В нашем примере событие, запускающее скрипт – on (. Это значит скрипт присоединенный к этой кнопке, будет выполнен, как только кнопка будет отпущена ( ) после нажатия. Всякий скрипт запускается событием, а событий таких в вашем фильме может быть множество – и нажатия на кнопки, и завершение проигрывания звукозаписи, и многое другое.
Они формируют сердце скрипта; обычно под "действием" подразумевается всякая строка, содержащая команду, инструкцию для
Вот пара примеров действий из приведенного выше примера скрипта:
mugCost = 5.00; cashRegister.gotoAndPlay (50);
Вообще говоря, действия – это основная масса строк, составляющих скрипт; часто они заключены в фигурные скобки ( { } ) и почти всегда завершаются точкой с запятой ( ; – см. далее).
Они обозначаются различными символами ( =, <, >, +, -, *, и т.д.) и означают различные способы взаимодействия двух элементов скрипта между собой. Взгляните на следующие примеры:
taxPercent = .06; присваивает значение .06 переменной с именем taxPercent
amountA < amountB проверяет, является ли amountA меньшим, чем amountB
value1 * 500 умножает value1 на 500
К ним относятся слова, зарезервированные в синтаксисе on – ключевое слово, оно используется в скрипте исключительно для указания на событие, запускающее скрипт, например, on(press), on( и так далее. Употребляйте в скриптах ключевые слова только для тех целей, для которых они предназначены, иначе в результате получите лишь сообщение об ошибке. К другим ключевым словам относятся: break, case, continue, delete, do, else, for, function, if, in, instanceOf, new, return, switch, this, typeOf, var, void, while и with.
Динамический скрипт в процессе выполнения постоянно создает, использует или обновляет всевозможные данные. Наиболее употребительная разновидность "частицы" данных – переменная: это некоторая частица данных, имеющая собственное уникальное имя. Создав переменную и присвоив ей значение, вы можете затем получить доступ к этому значению в любом месте скрипта, просто подставив
В нашем примере мы присвоили переменной с именем mugCost значение 5.00. Затем в том же скрипте мы, используя имя этой переменной, ссылались на значение, которое она содержит.
Вообще, все, что заключено между открывающей и закрывающей фигурными скобками, есть действие или набор действий, которые должны быть выполнены при запуске данной самостоятельной части скрипта. Можно представить себе это так: "В результате этого – {делать это}". Например:
on (release) {
//задается стоимость кружки
mugCost = 5.00;
//задается торговая наценка в процентах
taxPercent = .06;
}
Точка с запятой, стоящая в конце строки скрипта, отделяет одно действие от другого, подобно тому, как запятыми разделяются части сложного предложения. В следующем примере мы имеем шесть отдельных действий, разделенных знаком точки с запятой:
mugCost = 5.00; taxPercent = .06; totalTax = mugCost * taxPercent; totalCost = mugCost + totalTax; myTextBox = "The total cost of your transaction is " + totalTax; cashRegister.gotoAndPlay (50);
Точки ( .) имеют в скриптах два применения. Во-первых, они используются при указании пути к конкретному монтажному столу. Например, _root.usa.indiana.bloomington указывает на фильм-символ с именем "bloomington", содержащийся в фильме-символе "indiana", который, в свою очередь, содержится в фильме-символе "usa", находящемся на основном монтажном столе ( _root ).
Во-вторых: поскольку
колесо._вращение = 90;
Видите, точка отделяет ), мы должны написать:
колесо.play()
И вновь точка отделяет
Они используются в cashRegister начать воспроизведение с кадра 50:
cashRegister.gotoAndPlay (50);
Если заменить число 50 в скобках на 20, то смысл задачи не изменится (переход к определенному кадру), но выполнена она будет в соответствии с новым значением. Таким образом, при помощи скобок мы велим действию работать с тем, что заключено внутри них.
Кавычки указывают на текстовые данные. Поскольку сам скрипт является текстом, кавычки помогают программе разобраться, где инструкции или данные, а где обычные слова. Например, Derek (без кавычек) будет означать имя, например, переменной. А вот " Derek " будет означать не что иное, как слово Derek.
В скрипте это строки, начинающиеся двумя косыми чертами ( // ). Выполняя скрипт,
Они на самом деле абсолютно не нужны, однако использовать пробелы и отступы в синтаксисе все же стоит. Например,
on(release){
mugCost = 5.00;
}
Будет выполнено точно так же, как и
on(release) {
mugCost = 5.00;
}
Однако, согласитесь, что с отступами код читать намного удобнее. Правилом хорошего тона в программировании считается делать отступ перед каждой из строк, заключенных в фигурные скобки и представляющих собой блок кода, который состоит из команд, выполняемых подряд, в одно и то же время. При этом одни блоки могут находиться внутри других блоков, и тогда у них будет двойной отступ – с этим вы встретитесь в следующих упражнениях. Собственно, вам-то об этом особенно беспокоиться не придется – во
Как правило, в скрипте игнорируются и пробелы. Вот, например, такая строка:
totalCost = mugCost + totalTax ;
Выполняться она будет так же, как и
totalCost=mugCost+totalTax;
Одни программисты полагают, что с пробелами код лучше читается, а другие считают, что расставлять еще и пробелы слишком долго. Решайте сами. Но есть в отношении пробелов два правила: во-первых, имена переменных не могут содержать пробелы, а во-вторых – пробел нельзя ставить между именем объекта и связанным с ним свойством или методом. Такое написание будет правильным:
myObject.propertyName
А такое – нет:
myObject. propertyName
Приступая к созданию проекта, который будет работать под управлением
Многие решения следует принять заранее, даже прежде, чем открыть
Это самый важный вопрос в процессе планирования. Ваш ответ на него должен быть как можно более ясным и информативным, однако избегайте слишком вдаваться в детали.
Что касается проекта, созданием которого мы займемся в этом упражнении, то мы собираемся создать сцену, которая будет служить интерфейсом для системы оплаты счетов за электричество. Мы хотим, чтобы сумма счета загружалась в фильм из внешнего источника – текстового файла. Затем мы позволим пользователю ввести в текстовое поле сумму, которую он хочет заплатить. При нажатии кнопки сумма, которую пользователь платит, будет сравниваться с суммой, которую он должен, и на экране будет отображаться визуальная и текстовая информация (некое сообщение), в зависимости от результата – переплатил пользователь, недоплатил или внес ровно столько, сколько нужно. Как только пользователь отпустит кнопку, все визуальные и текстовые элементы сцены должны вернуться к своему первоначальному состоянию. Скрипт, который будет все это выполнять, и станет главным скриптом проекта.
Иными словами, сколько переменных нужно для функционирования приложения? В нашем случае нужна сумма счета за электричество – $60. Кроме того, мы должны отслеживать разность между этой суммой и суммой, уплаченной пользователем, чтобы мы могли вывести эту разницу в наших сообщениях.
В нашем проекте первым делом должна быть установлена сумма счета за электричество. Ведь главная
Теперь надо подумать о том, как эти данные – сумма счета – попадут в фильм. Мы можем поместить их в фильм в процессе создания, а можем загрузить из внешнего источника (например, с сервера или из файла) уже в процессе проигрывания фильма. Для нашего проекта мы предпочтем последнее: применим простенький скрипт для загрузки в фильм текстового файла, содержащего сумму счета ($60). Текстовый или иной файл, из которого в фильм загружаются данные, называется источником данных.
В нашем случае ответ очевиден: нажатие кнопки. Вообще же во
Как только будет запущен основной скрипт нашего фильма, должно быть выполнено сравнение суммы, введенной пользователем, с суммой которую он должен, чтобы определить, заплатил ли он слишком много, слишком мало или ровно. Ответ на этот вопрос будет определять то, какое сообщение будет выведено на экран, и что вообще будет происходить на экране.
Наша сцена будет состоять из нескольких элементов, некоторым из которых нужно будет дать имена, чтобы
Также нам требуется owed. Еще нам нужно текстовое поле для ввода, в котором пользователь будет указывать сумму, которую он желает заплатить; это поле назовем paid. Кроме того, необходимо еще одно динамическое поле, в котором будет выводиться сообщение, генерируемое скриптом; это поле пусть называется message. И наконец, нужно "сообщение" визуальное – мы добавим на сцену большую электролампочку. Сначала, когда пользователь еще ничего не заплатил, она будет "погашена". Если пользователь заплатит точную сумму по счету, лампочка засветится, а если он переплатит – лампочка раскалится. Лампочка эта будет представлять собой фильм-символ с именем light.
Каким угодно способом – в

Став мастером
Теперь, когда у нас есть вся нужная информация, а также эскизная раскадровка нашего проекта, давайте приступим к его сборке.

В первой части нашего упражнения мы создадим источник данных, загружаемых в наш фильм при его воспроизведении. Для нашего проекта этот источник данных содержит значение, представляющее собой сумму счета за электричество. electricBill и присвоит ей значение 60. Значение этой переменной будет использоваться в нашем проекте для нескольких целей.
Примечание
Цель данного курса состоит в том, чтобы обучать
Основной монтажный стол нашего проекта содержит пять слоев, в каждом из которых по 10 кадров. Слои названы так, чтобы их содержимое было очевидно с первого взгляда. Слой Actions (действия) в данный момент пуст.
Поскольку данное текстовое поле будет отображать сумму счета за электричество (долга), мы назвали его owed.

Примечание Во
Повнимательнее взглянув на инспектор Параметры, вы увидите, что это текстовое поле относится к типу Input Text, то есть поле для ввода. Оно будет использоваться для получения информации от пользователя, а именно – суммы денег, которую он желает внести в счет оплаты. В это текстовое поле мы ввели ноль (0), эта сумма будет отображаться в нем в начале фильма.
Данное текстовое поле будет отображать сообщения для пользователя, в зависимости от того, сколько он решит заплатить.
Поскольку наш скрипт будет воздействовать на этот экземпляр фильма-символа, мы должны дать экземпляру имя, чтобы можно было указать на него в скрипте. На монтажном столе данного фильма-символа имеется три кадра – с метками Off, On и Hot ; они будут определять вид фильма при различных условиях. Изначально на экране появится кадр Off.

В нашем скрипте (который мы вскоре напишем) мы предусмотрим, чтобы фильм-символ оставался на кадре с этой меткой, если пользователь заплатит меньше, чем он должен (не заплатил – сиди без света). Если пользователь заплатит ровно столько, сколько должен, мы переместим воспроизведение монтажного стола этого клипа к кадру с меткой On – чтобы свет включился. Если же пользователь заплатит больше, чем нужно, мы перейдем к кадру с меткой Hot, и лампочка прямо таки раскалится.
Теперь, когда все элементы в нашей сцене поименованы, можно приступить к написанию скрипта, и начнем мы с того, что дадим указание нашему фильму загрузить данные из внешнего текстового файла.
loadVariablesNum ("Electric_Bill.txt", 0);
Примечание Мы советуем оставить панель Действия в экспертном режиме, поскольку так будет проще всего вводить большинство скриптов, описанных в данном курсе.
Данная строка скрипта делает единственную вещь: загружает переменные из файла Electric_Bill.txt (который мы создали ранее) в Уровень 0, то есть в фильм, с которым мы сейчас работаем. Файл Electric_Bill.txt содержит единственную переменную с именем electricBill, имеющую значение 60. Таким образом, после выполнения этой строки программного кода в нашем фильме появится переменная electricBill со значением 60. Весь процесс заключается просто в переносе переменных из текстового файла в наш фильм.
loadVariablesNum() – это действие. Мы заставили его работать особым способом, указав в скобках уникальные значения параметров. Данное действие имеет два параметра, разделяемых запятой. Первый указывает на внешний источник, содержащий данные; второй – на монтажный стол, в который должны быть загружены данные. Впоследствии вы увидите, что таким же способом осуществляется указание параметров и для многих других элементов
Мы поместили этот скрипт в кадр 1 нашего фильма, стало быть, он будет выполнен, как только начнется воспроизведение фильма – это важно, поскольку фильм должен заранее получить значение переменной electricBill для скрипта, который будет организовывать работу кнопки-выключателя Light Switch.
owed.text = electricBill; stop ();
Итак, кадр 1 содержит действие, загружающее переменные из файла Electric_Bill.txt. Пока происходит загрузка, воспроизведение монтажного стола фильма продолжается, а когда он достигает кадра 10, выполняются действия, добавленные нами только что.
Первое действие устанавливает значение, отображаемое в экземпляре текстового поля owed, равным значению electricBill. Как вы помните, имя owed мы дали экземпляру текстового поля, расположенному в левом верхнем углу нашего фильма, а electricBill – переменная со значением 60, загружаемая из нашего текстового файла. Таким образом, данная строка скрипта приведет к тому, что в текстовом поле owed будет отображено число 60.

Как мы уже упоминали, во owed. Обратите внимание на точку (.), разделяющую
Кроме того, первая строка демонстрирует использование оператора между двумя элементами – свойством объекта и переменной (ее значением). Здесь это electricBill свойству text экземпляра текстового поля owed.
Последнее действие скрипта попросту останавливает воспроизведение монтажного стола. Поскольку это действие не требует каких-либо параметров, скобки остались пустыми.
Совет Как вы можете заметить, между кадром, содержащим действие electricBill, имеется промежуток из нескольких кадров. Это нужно для того, чтобы текстовый файл успел действительно загрузиться. Если бы мы попытались воспользоваться переменной electricBill до того, как завершится загрузка текстового файла, то столкнулись бы с проблемами. Фактически наш фильм вел бы себя так, словно текстовый файл и вовсе не загружался. "Прокладка" из кадров, созданная нами – один из способов предупреждения такой проблемы. О других способах мы поговорим в следующих уроках.
Теперь давайте назначим скрипт для нашей кнопки Light Switch.
on (press) {
amountPaid = Number(paid.text);
amountOwed = Number(owed.text);
}
Первое, на что следует обратить внимание – этот скрипт будет выполняться при нажатии кнопки, к которой он присоединен. Следом за указанием этого события идет открывающая фигурная скобка ({), две строки скрипта, затем закрывающая фигурная скобка (}). Эти фигурные скобки как бы говорят: "Эти два действия выполнить в результате нажатия кнопки". Скрипт выполняет две вещи: во-первых, создается переменная с именем amountPaid и ей присваивается значение, равное тому, что отображено в экземпляре текстового поля paid – только с помощью одного трюка. На самом деле все, что введено в текстовое поле, рассматривается как текст. Поэтому, хотя значение 100 выглядит в текстовом поле как число, оно считается текстом (состоящим из символов 1, 0 и 0, или "100" в кавычках), а не как число 100 (без кавычек).
Примечание
Наверное, вы уже поняли, что функция Number() – это специальный инструмент, позволяющий преобразовать текстовое значение в числовое. Текст, который вы хотите преобразовать, следует поместить в скобки в качестве параметра этой функции. Например:
myNumber = Number("945");
Такая команда преобразует текст "945" в число 945 (без кавычек) и присвоит это числовое значение переменной myNumber. В нашем скрипте мы применили функцию Number() и поместили в скобки ссылку на текстовое значение, которое нужно преобразовать. Таким образом, если пользователь введет в поле paid "54" (это будет текст), то, благодаря функции Number, переменной amountPaid будет присвоено значение 54 – числовое.
Примечание Функция Number() имеет свои ограничения: с ее помощью можно преобразовать только такой текст, где на первом месте стоит цифра. Например, Number("dog") в результате выдаст (not a number – не число), поскольку преобразование невозможно.
Следующая строка нашего скрипта выполняет точно такую же операцию, только здесь переменной amountOwed присваивается преобразованное в число значение, отображенное в экземпляре текстового поля owed. Вы помните, что это текстовое поле показывает сумму счета за электричество, то есть "60". Так что, после преобразования, amountOwed получит значение 60.
Причина, по которой нам приходится преобразовывать значения текстовых полей, состоит в том, что далее в нашем скрипте нужно будет использовать их для математических вычислений – а это значит, что нам нужны числа, а не текст.
Подведем итог. При нажатии кнопки текстовые значения, отображенные в текстовых полях paid и owed, преобразовываются в числа. Эти числовые значения присваиваются, соответственно, переменным amountPaid и amountOwed. Эти переменные будут использоваться в скрипте в дальнейшем.
if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы недоплатили " + difference + " долларов.";
} else if (amountPaid > amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Hot");
message.text = "Вы переплатили " + difference + " долларов.";
} else {
light.gotoAndStop ("On");
message.text = "Вы оплатили счет полностью.";
}
Поскольку мы поместили эти строки внутри фигурных скобок события on(press), они также будут выполняться при нажатии кнопки.
Эта порция скрипта делится точно на три части, обозначенные такими строками:
if (amountPaid < amountOwed) else if (amountPaid > amountOwed) else

Эти три строки представляют собой серию условий, которые скрипт при выполнении должен проанализировать. Сами условия, подлежащие анализу, указаны в скобках. Под каждой из этих строк (в фигурных скобках) имеется по несколько строк с отступом; они представляют действия, которые должны быть выполнены, если то или иное условие соответствует истине. Вот как это работает:
Когда кнопка нажата, наш скрипт должен определить, какую сумму оплаты ввел пользователь – меньшую, большую, или равную сумме счета. Это и есть три условия в нашем скрипте. Давайте рассмотрим первое, которое выглядит так:
if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы не оплатили " + difference + " dollars.";
}
В первой строке для сравнения значений двух переменных использован оператор "меньше, чем" (<). Первая строка переводится на человеческий язык так: "Если (If) сумма оплаты, введенная пользователем ( amountPaid ) меньше, чем сумма счета ( amountOwed ), предпринять действия, перечисленные ниже". Действия эти будут выполнены лишь в том случае, если условие соответствует истине. Поэтому этот набор действий заключен в фигурные скобки. Первое действие создает переменную с именем difference и присваивает ей значение amountOwed минус amountPaid. Если, например, пользователь ввел сумму 40, difference получит значение 20 ( amountOwed - amountPaid, или 60 – 40). Важно отметить, что все вычисления в правой части выражения (правее знака =) выполняются до того, как полученный результат будет присвоен элементу в левой части. Следующая строка указывает экземпляру фильма-символа light перейти к кадру с меткой Off и остановиться – поскольку пользователь недоплатил по счету, свет остается выключенным. Последняя строка генерирует сообщение, отображаемое в текстовом поле message.
Сообщение конструируется прямо в скрипте. Обратите внимание, что в этой строке использована переменная difference: Значение difference вставлено в середину данного сообщения, между двумя секциями текста, заключенного в кавычки и знаками "плюс". Если, например, difference имеет значение 20, получится такое сообщение:
"Вы недоплатили 20 долларов."
Как вы помните, все, что заключено в кавычки, считается обычным текстом. Поскольку слово difference в кавычки не заключено, text текстового поля message.
Если введенная пользователем сумма не меньше, чем сумма счета, то вся эта часть скрипта игнорируется, и начинается анализ следующей части. А она выглядит так:
else if (amountPaid > amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Hot");
message.text = "Вы переплатили " + difference + " dollars.";
}
Первая строка означает: "Иначе, если ( else if ) пользователь ввел сумму оплаты, большую, чем сумма счета, предпринять действия, перечисленные ниже". Выполняемые здесь действия – почти те же, что и в предыдущей части, лишь с двумя небольшими (но важными) отличиями. Во-первых, экземпляр фильма-символа light переходит к кадру с меткой Hot, который представляет лампочку, раскалившуюся от лишней
else {
light.gotoAndStop ("On");
message.text = "Вы оплатили счет полностью.";
}
Как видите, здесь уже не ставится вопрос, больше ли amountPaid, чем amountOwed или меньше (как было в предыдущих двух секциях). Скрипту уже незачем анализировать ситуацию, когда пользователь ввел сумму, точно соответствующую счету – дело в том, что эта секция кода будет выполнена лишь в том случае, если ни первая, ни вторая "не прошли проверку".
Итак, при нажатии кнопки выполняется только одна из этих трех секций кода. В результате на экране появляется определенный кадр фильма-символа light, а в текстовом поле message отображается соответствующее сообщение.
После того, как кнопка Light Switch будет отпущена, элементы нашей сцены должны вернуться в то состояние, в котором они находились при начале воспроизведения фильма. Давайте запрограммируем это.
on (release) {
light.gotoAndStop ("Off");
message.text = "";
}

Данный скрипт выполняется, как только кнопка отпущена. Он перемещает экземпляр фильма-символа light к кадру с меткой Off и стирает все из текстового поля message, возвращая эти элементы сцены к первоначальному состоянию.
Мы используем этот файл в следующем упражнении этого урока.
Было бы наивно полагать, что каждый скрипт сразу же заработает так, как планировалось. Ведь, независимо от того, насколько хорошо вы знакомы с
Это файл, в который мы внесли изменения в предыдущем упражнении. В этом упражнении мы протестируем проект на функциональность при помощи
Данная команда создает временную, но полнофункциональную экспортированную версию вашего фильма и воспроизводит ее в среде тестирования
Совет Старайтесь привлекать к тестированию проекта как можно больше своих друзей и коллег. Тем самым вы сильно повысите шансы проверить все возможные сценарии взаимодействия пользователя с фильмом и выявить все ошибки.
light ) останется выключенной.light должен "раскалиться" (его состояние в кадре с меткой Hot). как мы сказали, так должно случиться. На самом же деле мы получим сообщение, гласящее, что мы переплатили не 38 долларов, а –38! Что ж, отметим эту ошибку и продолжим тестирование.light перейдет во "включенное" состояние. Несомненная ошибка; отмечаем ее и продолжаем тестирование.Совет Иногда, найдя при тестировании сложного проекта ошибку, лучше сразу прервать тестирование и исправить ее (а не пытаться выявить все ошибки с тем, чтобы исправить их разом). Ведь пытаясь исправить дефект программы, вы можете сделать новую ошибку. Таким образом, в результате попытки исправления сразу всех ошибок вы можете получить несколько новых. Так лучше уж сконцентрироваться на исправлении одной ошибки, чтоб не пришлось, окончательно запутавшись, возвращаться к сохраненной ранее версии фильма.
Итак, мы выяснили, что наш проект содержит три дефекта:
Теперь давайте подумаем, чем вызваны эти дефекты. В первом случае, как нам известно, числовое значение difference, отображаемое в сообщении, вычисляется в скрипте. Кроме того, мы знаем, что проблема возникает лишь тогда, когда пользователь платит больше, чем нужно по счету. Стало быть, проблема заключается в способе вычисления difference, когда пользователь переплачивает по счету. Надо будет пересмотреть эту часть скрипта.
Что касается двух других ошибок, то дело вот в чем. Мы запрограммировали различные действия в зависимости от того, сколько заплатил пользователь. Однако мы забыли предусмотреть возможность, когда пользователь вообще ничего не вводит либо вводит текст – в таких случаях реакция нашего проекта вызывает просто смех. Надо будет внести в скрипт небольшое дополнение на такой случай.

Просмотрев секцию скрипта, определяющую поведение фильма в случае, когда amountPaid больше, чем amountOwed, мы обнаруживаем, что difference вычисляется путем вычитания amountPaid из amountOwed. Вот отсюда и проблема. Если пользователь платит 84 доллара, то difference будет вычислена как 60 – 84 ( amountOwed минус amountPaid ). Вычитание большего числа из меньшего дает отрицательный результат. Для исправления этого дефекта мы просто переставляем местами в этой строке amountOwed и amountPaid. Теперь меньшее число вычитается из большего, и мы получаем положительный результат.
Примечание Такую же строку в другой части скрипта изменять не нужно, поскольку та секция выполняется только в том случае, если пользователь платит меньше, чем нужно, и в этом случае значение difference вычисляется правильно.
Дополнение:
if (isNaN (amountPaid)) {
message.text = "Следует ввести сумму оплаты в долларах. Попробуйте еще раз.";
}
Изменение:
} else if (amountPaid < amountOwed) {
difference = amountOwed - amountPaid;
light.gotoAndStop ("Off");
message.text = "Вы недоплатили " + difference + " долларов.";
}
Как видите, после этой модификации первое проверяемое условие стало вторым. А первым теперь будет проверяться новое условие.

Добавленная секция предусмотрена на случай, если пользователь введет текст или вообще ничего не введет. Скрипт гласит, что если при нажатии кнопки Switch значение amountPaid не является числом ( isNaN ), то в сцене ничего не менять, но вывести сообщение, требующее, чтобы пользователь ввел правильное, числовое значение. Данная секция скрипта выполняется, если введенное значение не может быть преобразовано в числовое либо поле оставлено пустым. Функция isNan() – специальный инструмент
Примечание Далее в курсе вы найдете подробное описание функции isNaN().
Это условие мы поставили самым первым, как важнейшее, которое следует проверить прежде всего при выполнении скрипта. Если пользователь введет числовое значение, эта секция скрипта будет проигнорирована, и выполнение программы продолжится так, как было описано ранее.
На сей раз фильм должен работать правильно при всех обстоятельствах.
Поздравляем – первый урок завершен!
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.