.startDrag([<���За центр>, [<���Х1>, , <���Х2>, >]]);
После вызова действия или метода startDrag клип останется перетаскиваемым на сколь угодно долгое время. Чтобы завершить операцию "drag'n'drop", например, если пользователь отпустит кнопку мыши, нужно вызвать действие или метод stopDrag . Вот так (действие):
stopDrag();
или так (метод):
_root.car.stopDrag();
На заметку
Для завершения операции "drag'n'drop" также можно вызвать еще раз действие или метод startDrag , но уже для другого клипа. Только один клип в данный момент времени может быть перетаскиваемым.
Теперь давайте подумаем, как применить только что полученные сведения в деле написания реальных сценариев-обработчиков событий.
Для запуска и завершения операции "drag'n'drop" можно использовать обработчики событий mouseDown и mouseUp клипа — это очевидно. Давайте напишем эти обработчики и привяжем их к клипу, который нужно сделать перетаскиваемым.
onClipEvent(mouseDown) {
this.startDrag(false);
}
onClipEvent(mouseUp) {
this._x = _root._xmouse;
this._y = _root._ymouse;
this.stopDrag();
}
Обработчик события mouseDown запускает операцию перетаскивания клипа. А обработчик события mouseUp завершает эту операцию и одновременно помещает клип в ту точку, в которой пользователь отпустил кнопку мыши. Как видим, здесь нет ничего сложного.
Объект MovieClip предоставляет доступное только для чтения свойство _droptarget , возвращающее ссылку на так называемую "цель" операции "drag'n'drop" — на клип, в который был "брошен" перетаскиваемый клип. Можно проверить результат, возвращаемый этим свойством, и, в зависимости от него, завершить или не завершить операцию перетаскивания.
Здесь имеет место небольшое затруднение. Дело в том, что свойство _droptarget возвращает результат в особом формате, применяемом в старых версиях Flash (это версии 1–4). Это так называемая "запись со слэшем", когда в качестве разделителя между именем экземпляра объекта и названием его свойства или метода используется косая черта (/), а не точка. Для того чтобы преобразовать "запись со слэшем" в знакомую нам "запись с точкой", нужно воспользоваться встроенной во Flash функцией evai .
Давайте перепишем сценарии-обработчики событий mouseDown и mouseUp так, чтобы они не позволяли пользователю "бросить" перетаскиваемый клип в клип по имени forbiddenArea . Сценарии будут выглядеть так:
onClipEvent(mouseDown) {
this.startDrag(false);
oldX = this._x;
oldY = this._y;
}
onClipEvent(mouseUp) {
if (eval(this._droptarget)!= _root.forbiddenArea) {
this._x = _root._xmouse;
this._y = _root._ymouse;
} else {
this._x = oldX;
this._y = oldY;
}
this.stopDrag();
}
Теперь первый обработчик, помимо запуска операции "drag'n'drop", сохраняет изначальные координаты перетаскиваемого клипа в переменных oldX и oldY . Второй же обработчик, обнаружив, что пользователь перетащил клип в "запрещенное место", восстанавливает изначальное положение перетаскиваемого клипа. В обоих случаях операция "drag'n'drop" завершается.
Так же просто можно написать сценарий, который, наоборот, разрешит "бросать" перетаскиваемый элемент только в одно определенное место. Вообще, можно много чего придумать…
Создание фигурного курсора мыши
Очень многие приложения (не только созданные во Flash, но и обычные, работающие в системе Windows) "щеголяют" фигурными курсорами мыши. Давайте выясним, как создать такой курсор средствами Flash.
Предположим, что мы создали образец-клип и нарисовали в нем курсор желаемой формы. Далее мы поместили экземпляр созданного клипа на рабочий лист и назвали его cursor . Теперь, чтобы превратить этот клип в фигурный курсор мыши, привяжем к нему такой обработчик события по имени load:
onClipEvent(load) {
this.startDrag(true);
}
Обработчик load сразу же после загрузки клипа делает его перетаскиваемым. После этого клип cursor будет всегда перемещаться за курсором мыши и фактически сам станет курсором, чего мы и добивались.
Казалось бы, все замечательно. Одно плохо: "родной" курсор мыши, рисуемый самой системой Windows, портит всю картину. Его нужно спрятать. Для этого воспользуемся методом hide пока еще не изученного нами объекта Mouse (он будет рассмотрен далее в этой главе). Этот метод скрывает системный курсор мыши.
Читать дальше
Конец ознакомительного отрывка
Купить книгу