Статьи

Интерфейс между двумя файлами с использованием класса LocalConnection

В этом руководстве мы будем использовать класс AS3 LocalConnection для отправки и получения данных между двумя разными SWF-файлами. Сегодня мы будем использовать это, чтобы обнаружить движение мыши в одном SWF и отразить его в другом.


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

Этот урок разделен на две части. Первый будет посвящен отправляющему SWF, а второй — созданию получающего SWF. В этом уроке я также буду использовать класс документа .



Во-первых, создайте новый файл ActionScript 3.0.

Создание нового файла AS3.

Затем измените размер файла до 600px × 250px.

Изменение размера файла.

Этот шаг не необходим для функциональности, но больше для эстетики. Добавьте свое изображение на сцену, а затем заблокируйте его слой.

Добавление фона.

Блокировка фонового слоя.

Сохраните ваш FLA как Sending.fla, а затем создайте пустой файл AS. Сохраните этот файл в той же папке, что и ваш FLA, и назовите его Sending.as .

Создайте новый файл ActionScript.

Затем вернитесь и свяжите класс документа с FLA.

Свяжите класс документа с FLA.

Добавьте пустой пакет, класс и функцию конструктора в файл AS.

01
02
03
04
05
06
07
08
09
10
package {
 
    public class Sending extends MovieClip {
 
        public function Sending() {
        }
 
    }
 
}

Первое, что нам нужно сделать в нашем классе документов, это импортировать все классы, которые нам понадобятся в будущем.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
package {
 
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.StatusEvent;
    import flash.events.MouseEvent;
    import flash.net.LocalConnection;
 
    public class Sending extends MovieClip {
 
        public function Sending() {
        }
 
    }
 
}

Прежде чем мы начнем отправлять информацию с локальным подключением, лучше всего узнать, как именно ее использовать. Это действительно просто и состоит только из двух частей:

  • Объявление экземпляра класса.
  • Использование метода .send () .

Объявление экземпляра класса Local Connection легко:

1
private var localConnection:LocalConnection = new LocalConnection();

Далее нам нужно использовать метод .send . Этот метод подключается к другому SWF и затем запускает функцию в принимающем файле, которая обрабатывает любые переменные, которые передаются. Давайте посмотрим на пример:

1
localConnection.send(«_connectionName»,»methodName»,variable1,variable2);

И имя соединения, и имя метода должны быть заключены в кавычки (так как они являются строками). Кроме того, лучше всего начинать имя подключения с подчеркивания (_). Имя метода — это просто имя функции, которую вы хотите вызвать в получающем SWF. Функция в получающем SWF будет снабжена переменными в качестве аргументов . Теперь давайте использовать то, что мы только что узнали!


Вот все переменные, которые мы должны объявить:

1
2
3
4
private var localConnection:LocalConnection = new LocalConnection();
 
private var mX:Number;
private var mY:Number;

После объявления экземпляра нашего локального соединения мы создаем две переменные. mX будет содержать значение мыши «x», а mY будет содержать значение «y» мыши. Этот код необходимо поместить перед функцией конструктора, но внутри класса.

Далее идет функция конструктора. Эта функция содержит только одну строку: добавление прослушивателя событий для события Event.ENTER_FRAME . Мы рассмотрим функцию, которую она вызывает в следующем шаге. Вот готовая функция конструктора:

1
2
3
public function Sending() {
    stage.addEventListener(Event.ENTER_FRAME,mainLoop,false,0,true);
}

На предыдущем шаге мы создали прослушиватель событий, который вызывает эту функцию один раз в каждом кадре. Эта функция будет делать две вещи. Первый — установить переменные mX и mY равными позициям мыши « и «y» соответственно. Второй — отправить эти две переменные через локальное соединение в другой SWF-файл.

Вот готовая функция:

1
2
3
4
5
6
private function mainLoop(e:Event):void {
    mX = mouseX;
    mY = mouseY;
     
    localConnection.send(«_mouseConnection»,»processData»,mX,mY);
}

При отправке данных мы используем «_mouseConnection» в качестве имени подключения и «processData» в качестве имени метода. Это означает, что он попытается вызвать processData(mX, mY) .


Мы почти закончили. Все, что остается сделать, это обработать событие статуса. Объект LocalConnection отправляет события состояния; в этом проекте мы не будем использовать события; однако, если мы не будем прислушиваться к ним, мы получим ошибки, такие как эта: Ошибка 2044: необработанное StatusEvent :. уровень = ошибка, код =»

Мы уже импортировали событие на шаге 5, поэтому сначала добавим прослушиватель событий для события состояния в функции конструктора:

1
2
3
4
public function Sending() {
    stage.addEventListener(Event.ENTER_FRAME,mainLoop,false,0,true);
    localConnection.addEventListener(StatusEvent.STATUS, onStatus);
}

Теперь нам нужно создать пустую функцию для ответа на событие. Функция называется onStatus .

1
private function onStatus(e:StatusEvent):void {};

В разделе 1 мы узнали, как использовать класс LocalConnection для отправки информации через соединение в другой флэш-файл. Вот наш готовый файл AS для Раздела 1:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package {
     
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.StatusEvent;
    import flash.events.MouseEvent;
    import flash.net.LocalConnection;
     
    public class Sending extends MovieClip {
         
        private var localConnection:LocalConnection = new LocalConnection();
 
        private var mX:Number;
        private var mY:Number;
                 
        public function Sending() {
            stage.addEventListener(Event.ENTER_FRAME,mainLoop,false,0,true);
            localConnection.addEventListener(StatusEvent.STATUS, onStatus);
        }
         
        private function mainLoop(e:Event):void {
            mX = mouseX;
            mY = mouseY;
             
            localConnection.send(«_mouseConnection»,»processData»,mX,mY);
        }
         
        private function onStatus(e:StatusEvent):void {};
         
    }
     
}


Во-первых, создайте новый файл ActionScript 3.0.

Создание нового файла AS3.

Затем измените размер файла до 600px × 250px.

Изменение размера файла.

Как и раньше, этот шаг необходим не для функциональности, а для эстетики. Добавьте свое изображение на сцену, а затем заблокируйте его слой.

Добавление фона.

Блокировка фонового слоя.

Теперь нам нужно создать объект для отражения указателя мыши. Ему будут даны те же значения X и Y, что и у указателя мыши в другом файле с помощью ActionScript.

В этом примере я использую иконку карандаша (любезно предоставлено WeFunction ). Импортируйте значок на сцену в своем собственном слое, а затем преобразуйте его в мувиклип и присвойте ему имя экземпляра cursor_mc .

Преобразуйте объект в мувиклип.

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

Выровняйте изображение в соответствии с точкой регистрации.

Как и в первой части, сохраните свой FLA как Receiving.fla, а затем создайте пустой файл AS. Сохраните этот файл в той же папке, что и ваш FLA, и назовите его Receiving.as .

Создайте новый файл ActionScript.

Затем вернитесь и свяжите класс документа с FLA.

Свяжите класс документа с FLA.

Добавьте пустой пакет, класс и функцию конструктора в файл AS.

01
02
03
04
05
06
07
08
09
10
package {
 
    public class Receiving extends MovieClip {
 
        public function Receiving() {
        }
 
    }
 
}

Как и прежде, импортируйте все классы, которые нам понадобятся.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
package {
     
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.StatusEvent;
    import flash.net.LocalConnection;
     
    public class Receiving extends MovieClip {
         
        public function Receiving() {
 
        }
             
    }
     
}

Теперь мы готовы начать писать код для получения информации из локального соединения. Вот что нам нужно сделать:

  • Объявите экземпляр класса.
  • Подключитесь к локальному соединению.
  • Установите клиент для локального соединения.
  • Создайте метод для получения данных из локального соединения.

Объявление экземпляра класса Local Connection аналогично предыдущему:

1
private var localConnection:LocalConnection = new LocalConnection();

Далее нам нужно подключиться к соединению, которое мы создали, когда отправляли данные из другого файла.

1
localConnection.connect(«_connectionName»);

Теперь мы устанавливаем клиента. Клиент указывает объект, для которого вызываются функции. Обычно это установлено на это .

1
localConnection.client = this;

Наконец, нам нужно создать пустую функцию, которая будет получать данные через свои аргументы.

1
public function methodName(variable1:type,variable2:type…):void {};

Теперь, когда мы знаем, как получать информацию по локальному соединению, мы можем начать писать скрипт. Сначала объявите новый экземпляр LocalConnection. Поместите это перед функцией конструктора в классе.

1
private var localConnection:LocalConnection = new LocalConnection();

Затем в функции конструктора подключитесь к локальному соединению и установите его клиент:

1
2
3
4
public function Receiving() {
    localConnection.connect(«_mouseConnection»);
    localConnection.client = this;
}

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


Когда информация была отправлена ​​из отправляющего файла, была названа принимающая функция или метод. В этом проекте я использовал функцию processData () . Следующая функция получает координаты X и Y в качестве аргументов, а затем использует их для установки положения карандаша.

1
2
3
4
public function processData(mX:Number,mY:Number) {
    cursor_mc.x = mX;
    cursor_mc.y = mY;
}

Эта функция должна быть публичной, чтобы к ней можно было получить доступ через локальное соединение.


Как и в Разделе 1, поскольку мы используем локальное соединение, нам необходимо обрабатывать события состояния. Событие уже импортировано на шаге 16, поэтому нам нужно добавить прослушиватель событий для событий. Давайте добавим строку в функцию конструктора:

1
2
3
4
5
public function Receiving() {
    localConnection.connect(«_mouseConnection»);
    localConnection.client = this;
    localConnection.addEventListener(StatusEvent.STATUS, onStatus);
}

Затем мы создаем пустую функцию для ответа на прослушиватель событий:

1
private function onStatus(e:StatusEvent):void {};

Во второй части мы успешно получили информацию от локального соединения и обработали ее. Вот наш готовый файл AS:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package {
     
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.StatusEvent;
    import flash.net.LocalConnection;
     
    public class Receiving extends MovieClip {
         
        private var localConnection:LocalConnection = new LocalConnection();
 
        public function Receiving() {
            localConnection.connect(«_mouseConnection»);
            localConnection.client = this;
            localConnection.addEventListener(StatusEvent.STATUS, onStatus);
        }
         
        public function processData(mX:Number,mY:Number) {
            cursor_mc.x = mX;
            cursor_mc.y = mY;
        }
         
        private function onStatus(e:StatusEvent):void {};
         
    }
     
}

В этом уроке мы узнали, как использовать класс LocalConnection. Вы видели, как отправлять информацию, получать информацию, а также как обрабатывать события состояния. Этот метод часто используется в веб-рекламе, когда рекламодатель хочет синхронизировать рекламу между двумя разными позициями рекламы на одной веб-странице. Этот же принцип может быть легко разработан для включения двусторонней связи между двумя файлами.

Спасибо за чтение этого урока; Надеюсь, вам понравилось!