Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ActionScript 2.0 ЛР.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.88 Mб
Скачать

События клипа

Клипы (символы типа Movie Clip) могут реагировать на те же события, что и кнопки, с помощью обработчиков on (...). Кроме того, есть еще несколько особых событий, которых у кнопок нет. Наиболее важные из них:

  • load — клип полностью загружен;

  • enterFrame — произошел переход к следующему кадру клипа;

  • mouseDown — нажата кнопка мыши;

  • mouseMove — мышь переместилась;

  • mouseUp — кнопка мыши отпущена;

  • keyDown — нажата клавиша на клавиатуре;

  • keyUp — клавиша отпущена.

Для обработки этих событий используются обработчики onClipEvent (...), которые можно добавить на панели Actions, предварительно выделив клип.

При частоте кадров 12, событие enterFrame возникает 12 раз в секунду, даже если клип содержит единственный кадр. Мы используем это событие для того, чтобы постоянно обновлять x-координату ракеты на экране.

Динамическое текстовое поле с именем x имеет свойство text, которое можно изменять из программы (это и есть надпись на экране). Для обращения к свойству объекта используется точка, то есть адрес текста принимает вид x.text. Таким образом, запись текущей x-координаты клипа rocket в текстовое поле x должна выглядеть так:

x.text = rocket._x;

  1. Выделите ракету на сцене и откройте панель Actions (клавиша F9). Введите код обработчика события enterFrame:

onClipEvent (enterFrame) {

x.text = rocket._x;

}

Просмотрите результат.

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

Чтобы обнаружить ошибку, мы применим трассировку — вывод (в дополнительное окно) отладочных сообщений, которые позволят понять, что в самом деле происходит внутри программы.

  1. Добавьте в обработчик строчку

trace ( x );

При запуске появится окно Output (включается также через меню WindowOutput или клавишей F2), в котором появляются строчки undefined.

Происходит следующее: мы попросили программу сказать, что же такое x в этой точке, и в ответ получили, что x — это непонятно что (undefined, не определено). Значит, текстовое поле x не найдено — неверно задан его адрес. Сообщение появляется 12 раз в секунду, каждый раз, когда происходит событие enterFrame. Заметим, что точно такой же результат даст строчка

trace ( rocket );

Значит, обращение к клипу тоже неверно.

Дело в адресах. В обработчиках событий клипа текущим монтажным столом считается сам клип. Поэтому для того, чтобы обратиться к текстовому полю x, которое принадлежит не клипу, а главному монтажному столу, его адрес надо записать в виде _root.x (абсолютный адрес) или _parent.x (относительный адрес).

В правой части оператора надо обратиться к свойству _x текущего объекта, то есть написать this._x (относительный адрес) или _root.rocket._x (абсолютный адрес). Но можно то же самое написать проще, ведь _x обозначает то же самое, что this._x.

  1. Чтобы не ошибиться при обращении к объекту, можно нажать на кнопку Insert a Targent Part и выбрать из списка существующий объект. Программа автоматически вставит его адрес, относительный (при выборе варианта Relative) или абсолютный (вариант Absolute).

  1. Выделите ракету на сцене и откройте панель Actions. Исправьте код обработчика события enterFrame:

onClipEvent (enterFrame) {

_root.x.text = _x;

}

  1. Попробуйте вставить ссылку на текстовое поле с помощью кнопки Insert a Targent Part.

  2. Добавьте аналогичные пары (статический текст и динамическое текстовое поле) для остальных свойств клипа и дополните обработчик события командами, заполняющими эти поля. Просмотрите результат.

Заметьте, что координата _x и другие свойства клипа — целые числа. При записи в текстовые поля они будут автоматически преобразованы в символьный вид.

Значения свойств клипа можно не только читать, но и изменять. После загрузки клипа в память мы установим его начальные координаты в обработчике события load.

  1. Добавьте в код клипа Ракета обработчик события load (клип загружен в память):

onClipEvent (load) {

_x = 100;

_y = 100;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]