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

Знакомство с ActionScript

Урок 1: 123456 || Урок 2 >

Тестируем наш первый скрипт

Было бы наивно полагать, что каждый скрипт сразу же заработает так, как планировалось. Ведь, независимо от того, насколько хорошо вы знакомы с ActionScript, так легко пропустить какую-нибудь запятую или сделать ошибку в слове. Если бы это было письмо, получатель мог бы и не заметить такой ошибки, а вот Flash ошибок не прощает. Ошибка в скрипте – это "баг", дефект программы, а это значит, что скрипт либо вообще не заработает, либо будет работать, но не так, как вы планировали. К счастью, во Flash имеются полезные возможности для тестирования скриптов и выявления возможных ошибок.

  1. Если файл electricBill2.fla не открыт, откройте его.

Это файл, в который мы внесли изменения в предыдущем упражнении. В этом упражнении мы протестируем проект на функциональность при помощи инструментария Flash.

  1. В меню Flash выполните команду Управление > Проверить фильм (Control > Test Movie).

Данная команда создает временную, но полнофункциональную экспортированную версию вашего фильма и воспроизводит ее в среде тестирования Flash. Здесь можно проверить фильм во всех отношениях (определить общий размер файла, возможности потоковой передачи, внешний вид), но нас будут интересовать прежде всего интерактивные возможности – нужно выяснить, не напутали ли мы чего.

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

  1. Вводите различные суммы в поле "Amount you would like to pay:", нажимая затем кнопку Light Switch.
  • Введите сумму, меньшую 60. Если вы введете в это текстовое поле число 35, должно появиться сообщение "вы недоплатили 25 долларов", при этом лампочка (экземпляр фильма-символа light ) останется выключенной.
  • Введите сумму, большую 60. Если вы введете число 98, должно появиться сообщение "Вы переплатили 38 долларов", а символ light должен "раскалиться" (его состояние в кадре с меткой Hot). как мы сказали, так должно случиться. На самом же деле мы получим сообщение, гласящее, что мы переплатили не 38 долларов, а –38! Что ж, отметим эту ошибку и продолжим тестирование.
  • Введите точную сумму – 60. После ввода числа должно появиться сообщение "Вы оплатили счет полностью", а лампочка – засветиться.
  • Сотрите все, что есть в этом поле. Если вы теперь нажмете кнопку Light Switch, то получите все то же сообщение – "Вы оплатили счет полностью", и экземпляр фильма-символа light перейдет во "включенное" состояние. Несомненная ошибка; отмечаем ее и продолжаем тестирование.
  • Введите какой-либо текст. Введя что-либо, начинающееся с буквы и нажав кнопку Light Switch, вы вновь получите сообщение "Вы оплатили счет полностью", и лампочка зажжется – снова ошибка, отмечаем и ее.

Совет Иногда, найдя при тестировании сложного проекта ошибку, лучше сразу прервать тестирование и исправить ее (а не пытаться выявить все ошибки с тем, чтобы исправить их разом). Ведь пытаясь исправить дефект программы, вы можете сделать новую ошибку. Таким образом, в результате попытки исправления сразу всех ошибок вы можете получить несколько новых. Так лучше уж сконцентрироваться на исправлении одной ошибки, чтоб не пришлось, окончательно запутавшись, возвращаться к сохраненной ранее версии фильма.

Итак, мы выяснили, что наш проект содержит три дефекта:

  • Если пользователь переплачивает по счету, лишняя сумма в сообщении отображается как отрицательное число.
  • Если пользователь вообще ничего не платит (пустое поле), проект реагирует неправильно.
  • Если пользователь вводит вместо числового значения текст, проект реагирует неправильно.

Теперь давайте подумаем, чем вызваны эти дефекты. В первом случае, как нам известно, числовое значение difference, отображаемое в сообщении, вычисляется в скрипте. Кроме того, мы знаем, что проблема возникает лишь тогда, когда пользователь платит больше, чем нужно по счету. Стало быть, проблема заключается в способе вычисления difference, когда пользователь переплачивает по счету. Надо будет пересмотреть эту часть скрипта.

Что касается двух других ошибок, то дело вот в чем. Мы запрограммировали различные действия в зависимости от того, сколько заплатил пользователь. Однако мы забыли предусмотреть возможность, когда пользователь вообще ничего не вводит либо вводит текст – в таких случаях реакция нашего проекта вызывает просто смех. Надо будет внести в скрипт небольшое дополнение на такой случай.

  1. Закройте окно тестирования и вернитесь в среду разработки. Выделите кнопку Light Switch и измените в скрипте строку 9, ту, в которой значится: difference = amountOwed - amountPaid;, вместо этого напишите difference = amountPaid –amountOwed;.

Просмотрев секцию скрипта, определяющую поведение фильма в случае, когда amountPaid больше, чем amountOwed, мы обнаруживаем, что difference вычисляется путем вычитания amountPaid из amountOwed. Вот отсюда и проблема. Если пользователь платит 84 доллара, то difference будет вычислена как 60 – 84 ( amountOwed минус amountPaid ). Вычитание большего числа из меньшего дает отрицательный результат. Для исправления этого дефекта мы просто переставляем местами в этой строке amountOwed и amountPaid. Теперь меньшее число вычитается из большего, и мы получаем положительный результат.

Примечание Такую же строку в другой части скрипта изменять не нужно, поскольку та секция выполняется только в том случае, если пользователь платит меньше, чем нужно, и в этом случае значение difference вычисляется правильно.

  1. Не снимая выделения с кнопки Light Switch и не выходя из панели Действия (Actions), внесите дополнение и изменение в оператор if:

Дополнение:

if (isNaN (amountPaid)) {
  message.text = "Следует ввести сумму оплаты в долларах. Попробуйте еще раз.";
}

Изменение:

} else if (amountPaid < amountOwed) {
  difference = amountOwed - amountPaid;
  light.gotoAndStop ("Off");
  message.text = "Вы недоплатили " + difference + " долларов.";
}

Как видите, после этой модификации первое проверяемое условие стало вторым. А первым теперь будет проверяться новое условие.

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

Примечание Далее в курсе вы найдете подробное описание функции isNaN().

Это условие мы поставили самым первым, как важнейшее, которое следует проверить прежде всего при выполнении скрипта. Если пользователь введет числовое значение, эта секция скрипта будет проигнорирована, и выполнение программы продолжится так, как было описано ранее.

  1. Выполните команду меню Управление > Проверить фильм (Control > Test Movie). Вводите различные значения в текстовое поле "Amount you would like to pay:" и нажимайте кнопку Light Switch.

На сей раз фильм должен работать правильно при всех обстоятельствах.

  1. Закройте окно тестирования и вернитесь в среду разработки. Сохраните файл как electricBill3.fla.

Поздравляем – первый урок завершен!

Урок 1: 123456 || Урок 2 >
Салтанат Бектегенова
Салтанат Бектегенова

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

 

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

Вот задание:

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

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