• enterFrame(проигрывание кадра) – изменение положения перемещаемого элемента соответственно движению курсора минус разница между координатами центра элемента и координатами точки, по которой щелкнул пользователь.
Два момента из предыдущего списка могут смутить непрограммиста. Первый – это постоянно упоминаемая переменная. В коде ей будет назначено имя dragPartи исходное значение 0. Это значение соответствует состоянию, при котором не происходит никакого перемещения. Однако, как только пользователь выбирает элемент, переменной dragPartприсваивается номер данного элемента, а когда значение переменной равно какому-либо числу, происходит перемещение. Когда пользователь отпускает элемент, переменная вновь принимает значение 0.
В рассматриваемом коде есть еще один сложный момент – смещение при передвижении элементов. Когда мы перетаскиваем какой-либо объект, то приравниваем значения его координат значению координат курсора. Однако, если пользователь щелкнет не в центре координат объекта, то при приравнивании положения объекта к положению курсора, произойдет "скачок"; координаты объекта мгновенно станут равны координатам курсора.
Чтобы этого не происходило, мы используем переменные offsetxи offsetyдля хранения величины расстояния между центром объекта и местом клика и при изменении координат объекта учитываем это смещение.
Теперь давайте рассмотрим каждую часть данного кода. Вначале выполняется функция onClipEvent(load). Она необходима для инициализации переменной
dragPart.
// При загрузке ничего не перетаскиваем.
onClipEvent (load) {
dragPart = 0;
}
Наиболее сложной частью кода является функция onClipEvent (mouseDown). Она проверяет все 13 элементов при помощи функции hitTest и определяет, над какой из них расположен курсор. Затем задает переменную dragPart,а также переменные offsetxи offsety.Обратите внимание, что клипы элементов для упрощения кода имеют имена от "Parti" до "Part13".
// Начинаем перемещение.
onClipEvent (mouseDown) {
// Определяем текущие координаты курсора.
x = _root._xmouse;
o = _root._ymouse;
// Находим часть, над которой в данным момент находится курсор.
for(i=1;i<=13;i++) {
// Имеет смысл заменить константу 13 переменной, содержащей
// количество частей, например countOfParts. Это облегчит
// дальнейшую модификацию ролика.
{
if (_root ["Part"+i].hitTest(x,o, true)) {
// Указываем, какой элемент нужно перетаскивать,
// и задаем смещение.
dragPart = i;
offsetx = _root["Part"+i]._x – x;
offsety = _root["Part"+i]._y – y;
break;
}
}
}
Когда пользователь отпускает кнопку мыши, переменная вновь принимает значение 0.
// Заканчиваем перемещение.
onClipEvent (mouseUp) {
dragPart = 0;
}
...
Примечание
Вместо параметров _xmouse и _ymouse вышеприведенный код использует _root._xmouse и _root._ymouse. Первые параметры соответствуют положению курсора относительно клипа, а не рабочего поля. Поэтому если ваш клип не будет расположен в верхнем левом углу, вы не получите нужных значений. При добавлении в код параметра _root положение курсора будет всегда задаваться относительно рабочего поля.
Основополагающим компонентом данного кода является функция onClipEvent(enterFrame). Она проверяет, не равна ли переменная dragPartнулю, а затем задает положение перетаскиваемого элемента соответственно текущему положению курсора мыши плюс значение смещения.
// Если какой-либо элемент перетаскивается, меняем его координаты.
onClipEvent (enterFrame) {
if (dragPart > 0) {
_root["Part"+dragPart]._x = _root._xmouse + offsetx;
_root["Part"+dragPart]._y = _root._ymouse + offsety;
}
}
В нашем примере используются не клипы, а графические элементы из библиотеки. Но для всех графических символов, которые будут иметь возможность перемещаться по рабочему полю, мы устанавливаем свойство MovieClip в выпадающем меню Symbol Behavior (Поведение символа). Это меню находится в верхней левой части панели Properties (рис. 7.2). Теперь, хотя мы создали этот символ как графический элемент, его копии можно присваивать имя, как будто он является клипом! Например символ «Armi» в библиотеке отображается как графический элемент, но на панели Properties мы присвоили ему имя «Parti», так как свойство его поведения было изменено.
Рисунок 7.2. В панели Properties вы можете назначить графическому Flash-элементу свойство клипа и имя, отличное от его имени в библиотеке
Несколько слов о взаимном перекрывании символов на рабочем столе. Я расположил все подвижные элементы поверх головы и туловища, которые статичны. Исключение сделано для символов с изображением ног – они помещены на последний (задний) и предпоследний планы. Выделив элемент на рабочем столе, вы можете изменить его уровень с помощью команды Modify → Arrange (Изменения → Упорядочить).
Читать дальше
Конец ознакомительного отрывка
Купить книгу