Остановимся на мгновение. Обратите внимание, что пройден почти весь код, и пока что все работает так, как и предполагалось. Переменная задана правильно, функция isTen( ) вызвана и получила правильный параметр.
Многие ошибки происходят потому, что код, который, как нам кажется, выполнялся, вообще не был достигнут! С помощью предложений trace( ) можно убедиться, что вход в некоторый участок кода был осуществлен.
Методом исключения выясняется, что проблема кода заключается либо в условном предложении if(val = 10), либо в присвоении текстовому полю status = "equal". Следующим проверяем условное предложение, выводя с помощью trace( ) значение условного выражения (предполагается true или false):
trace(val = 10);
Эврика! В окне Output выводится 10, а не true или false, как ожидалось.
При ближайшем рассмотрении выясняется, что условное выражение является присваиванием, а не сравнением! Пропущен знак равенства в операторе проверки равенства. Выражение if(val = 10) на самом деле должно иметь вид if(val == 10).
Очевидно, не все ошибки столь просты, как это условное предложение (которое является весьма распространенной ошибкой), но использованный подход применим в большинстве случаев поиска ошибки: выполнить ряд функций trace( ), чтобы создать текущий пошаговый отчет о фактическом выполнении кода и использовать отладчик, как советует Macromedia.
В таблице 19-1 перечислены некоторые часто встречающиеся причины программных ошибок в ActionScript.
| 
   Ошибка  | 
  
   Описание  | 
 
| 
   Неверное расположение кода  | 
  
   Всякий код должен быть прикреплен к мувиклипу, кадру или кнопке. Следите,
  чтобы код был прикреплен туда, куда нужно, по заголовку панели Actions: если
  код прикреплен к кадру, заголовок панели будет Frame Actions; если код прикреплен
  к мувиклипу или кнопке, заголовок будет Object Actions. Если нужно
  расположить код в каком либо конкретном кадре, в начале написания кода
  следите за тем, чтобы этот кадр был выделен на шкале времени (Timeline) и
  чтобы этот кадр был ключевым. Если нужно, чтобы код был прикреплен к
  мувиклипу или кнопке, обеспечьте выделение соответствующего объекта на сцене
  перед началом ввода кода. Чтобы точно проследить, куда прикрепился,
  воспользуйтесь панелью Movie Explorer (Window   | 
 
| 
   Отсутствие обработчика события  | 
  
   Код, прикрепленный к мувиклипам и кнопкам, обязан находится в обработчике события. Для мувиклипов используйте: onClipEvent (событие) { // предложения } Для кнопок: on (событие) { // предложения } где событие является именем обрабатываемого события. Ошибка "Statement must appear within on handler" указывает на отсутствие обработчика события. См. главу 10 "События и обработчики событий".  | 
 
| 
   Неправильная ссылка на мувиклип  | 
  
   Ссылка на мувиклип, который не существует или имеет неверный формат. Проверьте, всем ли экземплярам даны имена и соответствуют ли эти имена указанным ссылкам. См. раздел 13.5.3 "Ссылки на вложенные мувиклипы" в главе 13 "Мувиклипы".  | 
 
| 
   Непредусмотренное преобразование типа данных  | 
  
   Неожиданный результат преобразования данных. Например, 3 + "4" дает строку "34", а не число 7. Аналогично строка "true" преобразуется в булево значение false! См. правила преобразования типов данных в главе 3 "Данные и типы данных". Проверяйте типы данных с помощью оператора typeof.  | 
 
| 
   Отсутствие точки с запятой  | 
  
   Предложение преждевременно завершено из-за отсутствия точки с запятой. О том, как правильно использовать точку с запятой, читайте в главе 14 "Лексическая структура".  | 
 
| 
   Неверный символ кавычки  | 
  
   Строка содержит не преобразованный в escape-последовательность символ, конфликтующий со строковым литералом. См. раздел 4.5.2 "Строковые литералы" в главе 4 "Элементарные типы данных".  | 
 
| 
   Неверное использование данных текстового поля  | 
  
   Текстовое поле используется как число или другой тип данных, отличный от строки. Значения, вводимые пользователем в текстовые поля, всегда являются строками (Strings) и должны быть вручную преобразованы для использования в качестве другого типа данных.  | 
 
| 
   Проблемы области видимости  | 
  
   Ссылка на переменную, свойство или функцию не учитывает область видимости. Например, предложение в обработчике мувиклипа пытается вызвать функцию, областью видимости которой является шкала времени родителя этого мувиклипа. См. раздел 10.7 "Область видимости обработчика событий" в главе 10 "События и обработчики событий", раздел 2.5 "Область видимости переменных" в главе 2 "Переменные" и раздел 9.6 "Доступность и срок жизни функций" в главе 9 "Функции".  | 
 
| 
   Смешение глобальной функции с методом  | 
  
   Имена некоторых глобальных функций совпадают с именами методов мувиклипов. Иногда это служит источником проблем. См. раздел 13.8.3.1 "Проблемы, связанные с перекрытием методов и глобальных функций" в главе 13 "Мувиклипы".  | 
 
| 
   Не загружено содержимое  | 
  
   Ссылка на мувиклип, свойство, функцию или переменную не может быть разрешена, поскольку содержимое еще не загружено. Убедитесь в завершении загрузки с помощью свойства MovieClip._framesloaded, как показано в части III "Справочник по языку".  | 
 
| 
   Неверное использование заглавных букв  | 
  
   В некоторых ключевых словах ActionScript учитывает регистр букв. Если ошибочно записать onClipEvent как onclipevent, ActionScript решит, что вызывается пользовательская функция onclipevent, а не используется ключевое слово встроенного обработчика события onClipEvent. В результате будет сообщено об ошибке при обнаружении { в начале блока предложений onClipEvent (интерпретатор ищет точку с запятой, обозначающую конец того, что он считает вызовом функции onclipevent). См. раздел 14.6 "Чувствительность к регистру" в главе 14 "Лексическая структура".  | 
 
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.