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

Для перетаскивания мувиков по сцене флеш-ролика в 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

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

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

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

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-12-15
Алексей, вы сейчас о чём? Просто ваш вопрос точно не про этот пост.
Комментатор
Комментарий добавил(а): Алексей
Дата добавления: 2013-12-15
А если целевые ролики (hit) пересекаются, т.е. один лежит поверх другого, как сделать чтобы нижний тоже реагировал на приближение объекта? Или здесь только программно отслеживать координаты?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-12-06
Алексей, скиньте исходник на edapskov@yandex.ru, а то на вашу ссылку сильно антивирус ... ругается. И укажите программу, в которой работаете.
Комментатор
Комментарий добавил(а): Алексей
Дата добавления: 2013-12-06
Спасибо огромное за такой оперативный ответ. А не подскажете что такое точка регистрации и как ее найти? Извиняюсь за такие дурацкие вопросы, я только учусь.
Комментатор
Комментарий добавил(а): Алексей
Дата добавления: 2013-12-06
Извините за навязчивость, может подскажете где ошибка? Вот мой файл http://rghost.ru/50718174
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-12-06
> Код явно не оттестирован, он не работает. Мало того, что объект не отцепляется над нужным объектом, он не отцепляется вообще. Не подскажете где ошибка?

Ошибка в вас. Готов спорить, что у вас под точкой регистрации перетаскиваемого мувика ... нет самого мувика. То есть, некому ловить событие мыши. Потому и не отцепляется.
Комментатор
Комментарий добавил(а): Алексей
Дата добавления: 2013-12-06
>Ммм... А я не вам писал пример? Пример с перетаскиванием нескольких объектов и проверкой пересечения:

Код явно не оттестирован, он не работает. Мало того, что объект не отцепляется над нужным объектом, он не отцепляется вообще. Не подскажете где ошибка?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-10-28
> Как можно запрограммировать то же, но что бы мувики цеплялись при наведении на них курсора и отцеплялись, в случае попадания в нужную область (тоже, без действий со стороны пользователя)?

Использовать события MOUSE_OVER или ROLL_OVER.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-10-28
Пардон, забыл. container - это мувиклип-контейнер, внутри которого лежат все другие мувики.
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2013-10-28
P. S. -
Я так думаю, нужно на один из обработчиков события написать "= null" или "remove" .
Добавить комментарий:







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

Идиот-тест

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

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