Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Web-дизайн 1 часть / Литература / ActionScript 2.0. Программирование во Flash MX 2004.pdf
Скачиваний:
354
Добавлен:
26.03.2015
Размер:
8.81 Mб
Скачать

Второе отличие отключения отображения клипа при помощи свойства _visible по сравнению с _alpha состоит в следующем. При использовании _visible клип перестает реагировать на такие «кнопочные» события, как onRelease, onPress и т. д. На него становится невозможно навести фокус, и он исключается из списка объектов, которые можно обойти, нажимая <Shift> + <Tab> (о клипах как кнопках читайте в главе 11). В общем, все проявления «кнопочного» поведения клипа отключаются. А это означает, что если под неотображаемым клипом располагается другой клип или кнопка, то они становятся доступными для «кнопочных» событий. При отключении же видимости клипа при помощи _alpha он сохраняет все особенности своего поведения, поэтому, например, при попытке нажать расположенную под ним кнопку сработает его собственное событие onRelease. Кнопка же останется незадействованной.

Все методы класса MovieClip могут быть применены к клипу, отображение которого отключено. Это, например, означает, что метод hiiTest() подтвердит пересечение клипов, даже если один из них является скрытым.

10.12. Перемещаемые клипы. Метод startDrag()

Одна из наиболее часто встречающихся задач в ActionScript-программировании связана с тем, чтобы сделать клип перемещаемым вслед за курсором мыши. Ее решение необходимо знать, чтобы создавать собственные курсоры, ползунки или эффекты типа «drag and drop» (это может быть, например, корзина для покупок в Интернет-магазине или фигура в шахматах).

В общем, заставить клип перемещаться вслед за курсором мыши не сложно и не используя специальных средств. Для этого достаточно просто всякий раз, когда мышь приходит в движение (этому событию соответствует обработчик onMouseMove), перемещать клип в точку, в которой находится курсор (его координаты определяются при помощи свойств _xmouse и _уmouse).

Например:

//Создаем клип в виде кружочка и называем его mov

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

_root.onMouseDown = function():Void { _root.onMouseMove = function():Void {

_root.mov._x = _root._xmouse;

_root.mov._y = _root._ymouse;

updateAfterEvent(); // Обновление экрана делает движение // более равномерным

};

};

// При отпускании кнопки мыши перемещение клипа mov прекращаем

_root.onMouseUp = function():Void { delete _root.onMouseMove;

};

Более просто и технично сделать клип перемещаемым можно, использовав специальный метод startDrag(). Его синтаксис:

clip.startDrag([point], [left, top, right, bottom]),

где:

clip — клип, который должен начать двигаться вслед за курсором мыши;

[point] — булева величина, определяющая расположение перемещаемого клипа относительно

курсора мыши. Если она равна true, то центр перетаскиваемого клипа будет совпадать с курсором независимо от того, какое расстояние их разделяло до активации метода startDrag(). Если point равняется false, то клип и курсор мыши сохранят ту относительность взаимного положения, которая наблюдалась в момент начала протаскивания, т. е. расстояние, которое их будет разделять, напрямую зависит от того, где окажется курсор при начале перемещения. Данный

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

Параметр point не является обязательным. Если он не задан, то по умолчанию для него используется значение false;

[left, top, right, bottom] — параметра, задающие граничные координаты прямоугольника, в рамках которого может перемещаться клип. Если курсор мыши передвигается вне данного прямоугольника, но одна из его координат входит в интервал, движение в котором для клипа позволено, то последний будет перемещаться параллельно указателю по границе выделенной области.

Описываемые параметры не являются обязательными. Если они не заданы, то клип передвигается без каких-либо ограничений.

Одновременно механизмом метода startDrag() может перемещаться только один клип. Повторное использование метода делает протаскиваемым другой клип, останавливая движение данного.

Начав однажды перемещаться, клип не остановится до тех пор, пока он не будет удален или метод startDrag() не будет задействован повторно. Это далеко не всегда приемлемо — обычно протаскивание клипа должно прекращаться по некоторому событию. Чтобы это было возможно, в ActionScript имеется специальный метод stopDrag(). Данный метод останавливает перемещение клипа вне зависимости от того, какой клип его вызвал. Эта особенность связана с тем, что в фильме может быть только один протаскиваемый клип, поэтому никакой альтернативы для метода stopDrag() не существует.

В качестве примера использования методов startDrag() и stopDrag() перепишем созданный выше для клипа mov код:

_root.onMouseDown = functions):Void { mov.startDrag(true);

};

_root.onMouseUp = function():Void {

_root.stopDrag();

// He имеет значения, какой клип остановит работу

};

// startDrag()

 

Как видите, применение методов startDrag() и stopDrag() может порой значительно упростить код сценария. Однако у метода startDrag() имеется один недостаток, которого нет в созданном в начале подраздела скрипте. Дело в том, что задаваемые им изменения в положении клипа отображаются только при событии смены кадров. А так как частота кадров по умолчанию не очень высока, то при быстром движении указателя мыши создается впечатление, что клип перемещается рывками. Обойти эту проблему можно, внепланово обновляя экран всякий раз после переопределения координат клипа. Это мы и сделали, создавая имитирующий startDrag() код, воспользовавшись функ-

цией updateAfterEvent().

Помимо методов, имеются и абсолютно аналогичные им глобальные функции startDrag() и stopDrag(). Так как при использовании функций допустить ошибку гораздо проще, чем при применении методов, то выбор всегда нужно делать в пользу последних. О наличии же одноименных методам startDrag() и stopDrag() глобальных функций необходимо помнить лишь в одном аспекте: их наличие означает, что соответствующие методы не могут использоваться без явного задания вызывающего клипа (подробнее см. подраздел Ш.3.2).

10.12.1. Свойство _droptarget

Свойство _droptarget является вспомогательным инструментом, облегчающим создание интерфейсов типа «drag and drop» при помощи метода startDrag(). Оно хранит строку с указанием пути к

Соседние файлы в папке Литература