Урок 17. Применение метода "Перетащи и положи" к клипам

Исходный файл: Dragsimple.fla

Важным свойством интерфейса, будь то игра или приложение, являете возможность перетаскивать элементы по экрану. Во Flash это можно сде лать несколькими способами. Мы рассмотрим три из них.
Команда startDrag задает автоматическое следование клипа за курсором. Пример Dragsimple.fla демонстрирует самый простой способ применения данной команды.
Клип под названием "circle" с изображением круга был помешен на рабочее поле. Как только ролик запускается, нижеприведенная команда задает его движение следом за курсором. Она также задает остановку анимации главной временной шкалы, чтобы ролик не продолжал воспроизведение следующих кадров.

startDrag("circle", true);
stop () ;

В нашем примере команда startDrag использует два параметра. Первый - это имя перетаскиваемого клипа. Второй - ключевое слово true которое в данном случае задает привязку центра объекта к курсору. Ее второй параметр имеет значение false, за основу будет взято расстояние между курсором и центром клипа на момент выполнения командь startDrag. Ключевые слова true и false называются булевыми константами.

Они могут использоваться в случае, если атрибут либо действует, либо нет, а также отображать результат сравнения, например "а = = b.

В примере Dragsimple.fla клип "circle" следует за курсором. Однако чаше всего применяется другой способ перетаскивания: пользователь подводит курсор к объекту, нажимает кнопку мыши, перетаскивает объект в нужное место и отпускает кнопку.

Исходный файл: Dragcomplex.fla

Подобную манипуляцию можно осуществить с клипом, внутри которого содержится кнопка. В файле Dragcomplex.fla в тот же самый клип "circle" была помешена невидимая кнопка (в ней заполнен лишь один кадр "Hit"). Таким образом, клип circle включает такую же графику, как и в примере Dragsimple.fla, и, помимо этого, кнопку. Кнопке назначен следующий сценарий: когда пользователь нажимает кнопку, выполняется команда startDrag, когда отпускает - команда stopDrag.

on (press) {
startDrag("",false) ;
on (release) {
stopDrag();
}

Пустые кавычки внутри команды startDrag сообщают Flash, что перетаскиваться будет текущий клип. Кнопка находится внутри клипа "circle", поэтому перемещаться будет именно он. false в качестве второго параметра означает, что клип не будет привязан к центру курсора, а сохранит первоначальное расстояние между курсором и центром клипа. При этом будет создаваться впечатление, что курсор схватил круг в некоторой точке и перетаскивает его за нее.
Команда stopDrag не требует никаких параметров. Одновременно может перетаскиваться только один клип, поэтому команде необходимо лишь остановить текущее действие перемещения, благодаря чему клип вернется в неподвижное состояние.
Одним из недостатков команды startDrag является то, что одновременно может быть перемешен только один клип. Кроме того, клип перемешается автоматически, поэтому за его движением трудно проследить. По этой причине вам не помешает знать еше один способ перетаскивания клипа.

Исходный файл: Dragbetter.fla

Соответствующий код содержится в файле Dragbetter.fla. Ролик устроен аналогично ролику из примера Dragcomplex.fla, клип которого содержит невидимую кнопку. Однако данной кнопке назначен совершенно другой сценарий. Согласно данному сценарию, переменная drag получает значение true, когда пользователь нажимает на кнопку, и значение false, когда отпускает.

on (press) {
drag = true;
on (release) {
drag = false;
}

Переменная drag является глобальной переменной и совместно используется всем кодом клипа. В зависимости от значения drag сценарий определяет, должен ли клип следовать за курсором.
Сценарий устанавливает соответствие между переменными _х, _у перетаскиваемого клипа и _xmouse, _ymouse ролика. Два последних параметра описывают положение курсора мыши относительно рабочего поля основного ролика.

onClipEvent (enterFrame) {
if (drag) {
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}

Ключевое слово this обозначает ссылку на текущий объект. Сценарий назначен клипу "circle", поэтому this относится к нему. В следующем разделе мы рассмотрим другие способы обращения к клипам на различных уровнях.