LocalConnection (локальное соединение) в ActionScript обеспечивает взаимодействие между swf-файлами, запущенными на одном и том же ПК. В этом уроке мы рассмотрим самый простой способ использования LocalConnection в флеш-приложениях: мы будем передавать информацию о координатах объекта из одного swf-файла в другой.
Итак, приступим.
Для этого урока мы должны создать два отдельных swf-файла.
Первый файл будет называться localconnection_1.swf. Этот файл будет принимать через LocalConnection определённые данные и определённым образом на эти данные реагировать. Код для этого файла будет следующим...
Код ActionScript 3.0:
/*
создаём объект LocalConnection
*/
var lc:LocalConnection = new LocalConnection();
/*
указывает объект (this - создаваемое локальное подключение), для которого вызываются методы ответного вызова
*/
lc.client = this;
/*
готовим объект LocalConnection к получению команд от другого swf-файла
в качестве параметра указываем имя соединения - "myconnection"
*/
lc.connect("myconnection");
/*
функция, которую мы будем запускать из другого swf-файла через локальное соединение
*/
function go(newX:uint,newY:uint)
{
/*
эта функция получает координаты мувика mc из другого swf-файла и присваивает их одноимённому мувику в этом swf-файле
*/
mc.x = newX;
mc.y = newY;
}
Второй файл будет называться localconnection_2.swf. Этот файл будет отправлять данные в ранее упоминавшийся файл localconnection_1.swf.
На сцене флеш-ролика localconnection_2.swf мы разместим MovieClip с картинкой внутри (он будет называться mc). Данный мувик пользователь может перетаскивать по сцене флеш-ролика. Каждый раз раз при изменении координат мувиклипа mc LocalConnection будет отправлять данные о новых координатах мувика в файл localconnection_1.swf. А в файле localconnection_1.swf будет аналогичный мувиклип (он тоже будет называться mc), координаты которого будут изменяться в соответствии с данными от LocalConnection. Надеюсь, понятно объяснил.
Теперь код для localconnection_2.swf.
Код ActionScript 3.0:
/*
создаём объект локального соединения
*/
var lc:LocalConnection = new LocalConnection();
/*
разрешаем перетаскивание мувика mc при зажатой ЛКМ
*/
addEventListener(MouseEvent.MOUSE_DOWN, mDown);
function mDown(event:MouseEvent):void
{
mc.startDrag(true, new Rectangle(0,0,550,400));
/*
начинаем отслеживать событие перемещения курсора мышки по сцене флеш-ролика
*/
addEventListener(MouseEvent.MOUSE_MOVE, mMove);
}
addEventListener(MouseEvent.MOUSE_UP, mUp);
/*
если ЛКМ отжата, то перетаскивание мувика mc запрещено
*/
function mUp(event:MouseEvent):void
{
mc.stopDrag();
/*
прекращаем следить за перемещением курсора мышки по сцене
*/
removeEventListener(MouseEvent.MOUSE_MOVE, mMove);
}
/*
если ЛКМ зажата, то следим за перемещением курсора мышки
если курсор изменяет своё положение, то, скорее всего, пользователь перетаскивает мувик mc по сцене
*/
function mMove(event:MouseEvent):void
{
/*
через соединение с именем "myconnection" вызываем в другом swf-файле функцию "go"
остальные параметры метода send() - это дополнительные параметры-данные, которые мы можем передать в другой swf-файл
в данном случае мы передадим новые координаты мувика mc
*/
lc.send("myconnection", "go", mc.x, mc.y);
}
Ну а теперь давайте посмотрим, как всё это работает на практике. Итак, у нас есть два swf-файла с одинаковыми объектами на сцене (картинка со значком Flash). Данный объект можно перетаскивать только во втором swf-файле. Но при изменении положения объекта во втором флеш-ролике аналогичные изменения должны происходить и с объектом в первом флеш-ролике. Проверяем это утверждение.
Первый swf-ролик (localconnection_1.swf):
Второй swf-ролик (localconnection_2.swf):
Лично у меня всё работает. А у вас?
Исходник к данному уроку под Adobe Flash CS5.5 скачать можно здесь.
Что именно сделать?