Программное перетаскивание объектов в флеш-роликах

Для перетаскивания мувиков по сцене флеш-ролика в ActionScript 2.0 имеется два специальных метода:

1.) startDrag() - задаёт параметры и начинает перетаскивание; имеет несколько необязательных, но очень полезных параметров:

- первый параметр отвечает за положение курсора мышки относительно перетаскиваемого объекта и может принимать булевы значения true или false. Работу данного параметра наглядно демонстрирует следующий пример.

В данном приложении имеется два мувиклипа, которые можно перетаскивать. Но левому мувиклипу в качестве первого параметра указано значение true. Поэтому при перетаскивании левого мувика курсор мышки всегда располагается над точкой регистрации мувиклипа (в данном примере нулевая точка координат мувиклипа помечена двумя пересекающимися линиями). А правому мувику в качестве первого параметра указано false, благодаря чему жесткой привязки курсора мышки к центру мувиклипа не происходит.

- четыре последующих параметра являются числами и определяют область перетаскивания - это прямоугольная область, в которой возможно перетаскивание данного объекта. Из этих 4-х параметров два первых указывают координаты верхнего левого угла области перетаскивания, а два последних хранят координаты нижнего правого угла прямоугольной области. Именно на основе данных о координатах верхнего левого и нижнего правого углов и строится прямоугольная область, внутри которой возможно перетаскивание объекта.

2.) stopDrag() - останавливает перетаскивание.

Примечания:

[!] на плавность перетаскивания влияет fps данного флеш-ролика. Если fps низкий, то перетаскивание будет происходить рывками, объект будет заметно отставать от курсора мышки;

[!] одновременно можно перетаскивать только один объект.

Чтобы проверить работу этих методов на практике, создаём мувик с именем "mc" и пишем приведённый ниже код на главной временной шкале флеш-ролика.

Код ActionScript 2.0:

mc.onPress = function() { mc.startDrag(false, 100, 100, 450, 300); }; mc.onRelease = function() { mc.stopDrag(); };

В результате у нас получается следующее:

В данном примере границы области перетаскивания обозначены красной пунктирной линией. Сама же прямоугольная область перетаскивания построена на основе координат верхнего левого угла (100,100) и нижнего правого угла (450,300).

В ActionScript 3.0 перетаскивание осуществляется одноимёнными методами, но для определения области перетаскивания используется экземпляр класса Rectangle, который имеет 4 параметра:

- координаты области перетаскивания по оси x;

- координаты области перетаскивания по оси y;

- ширина области перетаскивания;

- высота области перетаскивания.

Код ActionScript 3.0:

addEventListener(MouseEvent.MOUSE_DOWN, mDown); function mDown(event:MouseEvent):void { /* От первого параметра зависит расположение объекта относительно курсора мышки. Второй параметр определяет границы области, в которой осуществляется перетаскивание. */ mc.startDrag(true, new Rectangle(100,100,350,200)); } addEventListener(MouseEvent.MOUSE_UP, mUp); function mUp(event:MouseEvent):void { /* останавливаем перетаскивание */ mc.stopDrag(); }

Автор: admin

Дата добавления: 2011-07-20

Просмотров: 16099

Рейтинг поста: +36-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-07-16
Alex_M, перетаскивать надо тот объект, который является контейнером и для табло часов, и для стрелок. В этом случае перетаскивание будет корректным, а ухищрения - излишними.
Комментатор
Комментарий добавил(а): Alex_M
Дата добавления: 2012-07-15
У меня созрел такой вопрос: каким образом можно сделать перетаскивание динамического объекта. К примеру хочу сделать перетаскивание механических часов по картинке. У меня получается, что перетаскивать надо циферблат(стрелки все стираются), а после "отпускания" циферблата идет обновление расположения стрелок. Можно ли каким-нибудь другим методом это сделать, чтоб стрелки не стирались а все отображалось во время перетаскивания.
Комментатор
Комментарий добавил(а): Alex_M
Дата добавления: 2012-07-12
Спасибо!
Комментатор
Комментарий добавил(а): Юлия
Дата добавления: 2012-02-21
спасибо!!
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2011-11-17
Сомневаюсь, что баг :-) А вообще всё сильно зависит от используемых событий. Например, можно так:

mc.onPress = function() {
mc.startDrag(false, 0, 0, 300, 400);
};
mc.onMouseUp = function() {
mc.stopDrag();
};
Комментатор
Комментарий добавил(а): GothX
Дата добавления: 2011-11-17
А всегда интересно было (не задумывался над этим, просто было интересно :) ), как можно обойти багу, когда начинаешь перетаскивать объект, выходишь за границы перетаскивания, отпускаешь левую кнопку мыши и возвращаешься в область перетаскивания, то объект продолжает бегать за курсором.
Комментатор
Комментарий добавил(а): Вася
Дата добавления: 2011-09-28
"Но ник..." XDD
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2011-09-27
Спасибо, конечно... Но ник...
Комментатор
Комментарий добавил(а): Беременный Юра
Дата добавления: 2011-09-27
Вауу супер!
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 4 из 4: 1234
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика