Для перетаскивания мувиков по сцене флеш-ролика в 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();
}
Да, я тоже о движке greensock. Очень полезен при создании легкой анимации, но пока не освоил все его возможности.
Создал всего 5 мувиклипов, присвоил им нужные имена экземпляров.
В коде почему-то при компиляции появляется ошибка в строках 19 и 51 "1120 Обращение несуществующего свойства container".
Пробовал даже комбинировать эти 3 мувиклипа в "container".
Второй вопрос про события мыши...
Пользователь обычно опасается кликать по баннеру, ожидая переход по рекламной ссылки.
Как можно запрограммировать то же, но что бы мувики цеплялись при наведении на них курсора и отцеплялись, в случае попадания в нужную область (тоже, без действий со стороны пользователя)?
А в случае не попадания и выхода за пределы баннера или области rectangle прекратили следить за курсором мыши. То есть, перемещаться по краям этого прямоугольника?