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

События мыши

Кнопки и клипы могут обрабатывать несколько событий:

  • press — над объектом нажата кнопка мыши;

  • release — над объектом отпущена кнопка мыши;

  • releaseOutside — кнопка мыши отпущена вне объекта;

  • rollOver — указатель мыши наведен на объект (без нажатия);

  • rollOut — указатель мыши ушел с объекта (без нажатия);

  • dragOut — указатель мыши ушел с объекта при нажатой кнопке;

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

Мы сделаем так, чтобы при событии rollOut ракета становилась немного более прозрачной (на 5 процентов). Для этого надо уменьшить значение _alpha.

  1. Добавьте обработчик события мыши для клипа Ракета:

on (rollOut){

_alpha -= 5;

}

Заметьте, что параметр _alpha по смыслу не должен быть меньше нуля.

Перетаскивание

Перетаскивание мышкой тоже делается очень просто: при нажатии кнопки на объекте (событие press) надо «захватить» объект и начать перетаскивание:

startDrag ( this );

В скобках указывается адрес объекта (this означает «текущий объект», то есть клип).

При отпускании кнопки (событие release) надо закончить перетаскивание:

stopDrag();

  1. Добавьте обработчики событий мыши для клипа Ракета:

on ( press ){

startDrag(this);

}

on ( release ){

stopDrag();

}

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

  1. Выделите строчку кода on(release) и щелкните по словам Script Assist в правом верхнем углу панели Actions. Отметьте флажок releaseOutside и закройте окно повторным щелчком по словам Script Assist.

Теперь при отпускании мыши за пределами клипа перетаскивание также заканчивается.

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

Клип, как уже говорилось, также может реагировать на события mouseDown, mouseUp и mouseMove. Важно, что эти обработчики вызываются не только тогда, когда мышь над клипом, а при любом изменении состояния мыши. При этом координаты курсора хранятся в свойствах _xmouse и _ymouse главного монтажного стола _root.

Например, мы сделаем, чтобы ракета вращалась против часовой стрелке, если мышь двигается в левой половине поля, и по часовой стрелке, если в правой. Для этого надо написать обработчик события mouseMove, в котором менять свойство _rotation клипа Ракета. Чтобы определить направление вращения, будем сравнивать x-координату клипа с половиной ширины окна, то есть с _root._width/2.

  1. Добавьте еще один обработчик к коду клипа:

onClipEvent (mouseMove) {

if (_root._xmouse < _root._width/2)

_rotation -= 0.5;

else _rotation += 0.5;

}

При просмотре обнаруживается неточность: во время перетаскивания ракета продолжает вращаться, ведь событие mouseMove происходит и вызывается обработчик. Чтобы прекратить вращение во время перетаскивания, надо где-то запоминать, что мы тащим ракету. Легче всего сделать это при помощи специальной логической переменной dragging, которая может принимать значения true и false. В начале перетаскивания мы запишем в эту переменную true, а когда перетаскивание закончено, запишем в нее false.

  1. Измените обработчики событий:

on ( press ){

startDrag(this);

dragging = true;

}

on ( release, releaseOutside ){

stopDrag();

dragging = false;

}

Теперь можно использовать значение этой переменной в обработчике mouseMove — вращать ракету только тогда, когда dragging=false.

  1. Измените обработчик события:

onClipEvent (mouseMove) {

if ( ! dragging ) {

if (_root._xmouse < _root._width/2)

_rotation -= 0.5;

else _rotation += 0.5;

}

}

Восклицательный знак означает операцию НЕ, так что условный оператор if(!dragging) имеет смысл «если не тащим ракету». Только при этом условии изменяется свойство _rotation.

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