<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.flashist.ru" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Local Connection</title>
 <link>http://www.flashist.ru/taxonomy/term/52</link>
 <description>Представление таксономии с учетом глубины 0.</description>
 <language>ru</language>
<item>
 <title>LocalConnection, или как вызвать из одной флешки функцию другой</title>
 <link>http://www.flashist.ru/2008/02/16/localconnection-ili-kak-vyzvat-iz-odnoj-fleshki-funkciyu-drugoj</link>
 <description>&lt;p&gt;&lt;h3&gt;Вопрос:&lt;/h3&gt;&lt;br /&gt;
Здравствуйте снова. У меня следующий вопрос или скорее даже просьба: Все никак не могу врубиться в класс &lt;span style=&quot;font-weight:bold&quot;&gt;LocalConection&lt;/span&gt;. Как им пользоваться? Искал разные способы уже опубликованные кем-то где-то на форумах - вставлял свои имена в коды, но ничего не работало. Мне нужно заставить &lt;span style=&quot;font-weight:bold&quot;&gt;пересылать команды из одного swf в другой&lt;/span&gt;, находящихся на одном сайте. Буду примного благодарен за объяснение. И если вам не трудно - пример с кодом ).&lt;br /&gt;
Ответ:&lt;/p&gt;

&lt;p&gt;Здраствуйте… Каюсь, боюсь вам больше не нужна моя помощь, так как вопрос был задан 06.02.2008 г., а сегодня уже 16 число, этого же месяца, целых 10 дней прошло, мало ли что могло случиться, и вам, может быть, сейчас совсем не до &lt;span style=&quot;font-weight:bold&quot;&gt;флешек&lt;/span&gt; и каких-то там &lt;span style=&quot;font-weight:bold&quot;&gt;Local Connection в Flash&lt;/span&gt;, но всё-таки, сегодня родил я перед сном &lt;span style=&quot;font-weight:bold&quot;&gt;пример c уроком&lt;/span&gt; и даже &lt;span style=&quot;font-weight:bold&quot;&gt;исходником&lt;/span&gt; для вас, может чем-то и поможет =)&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Две флешки на одной странице&lt;/h3&gt;&lt;br /&gt;
Сразу оговорюсь, всё описанное ниже будет работать ТОЛЬКО в сети, но никак не на локальном компьютере, по-крайней мере у меня именно так и было. Максимум на что вы можете расчитывать тестируя данные Flash приложения — это &lt;span style=&quot;font-weight:bold&quot;&gt;взаимодействие двух флешек&lt;/span&gt; на разных страницах браузера, открытых в данные момент. Кстати вот вам ещё один факт, несколько &lt;span style=&quot;font-weight:bold&quot;&gt;Flash приложений&lt;/span&gt; могут взаимодействовать между собой не только находясь &lt;a href=&quot;http://www.flashist.ru/files/localconnection/local_connection.html&quot; class=&quot;bb-url&quot;&gt;на одной HTML странице&lt;/a&gt; браузера, но и на разных (например &lt;a href=&quot;http://www.flashist.ru/files/localconnection/otpravlyaet.swf&quot; class=&quot;bb-url&quot;&gt;тут&lt;/a&gt; и &lt;a href=&quot;http://www.flashist.ru/files/localconnection/prinimaet_2.swf&quot; class=&quot;bb-url&quot;&gt;тут&lt;/a&gt;), на самом деле интересная штука.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Flash. Local Connection. Взаимодействие&lt;/h3&gt;&lt;br /&gt;
Так, чтобы заставить взаимодействовать между собой две &lt;span style=&quot;font-weight:bold&quot;&gt;флешки&lt;/span&gt;, нужно сначала создать в них объекты класса &lt;span style=&quot;font-weight:bold&quot;&gt;Local Connection&lt;/span&gt;, которые будут посылать друг другу команды, а так же разобраться какие команды посылают, а какие принимают команды.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Создаём объект Local Connection&lt;/h3&gt;&lt;br /&gt;
&lt;code class=&quot;bb-code&quot;&gt;var receiving_lc:LocalConnection = new LocalConnection();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Как понятно, &lt;span style=&quot;font-weight:bold&quot;&gt;receiving_lc&lt;/span&gt; — это имя объекта &lt;span style=&quot;font-weight:bold&quot;&gt;Local Connection&lt;/span&gt;, с которым мы будем работать.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Посылаем команды. Метод send&lt;/h3&gt;&lt;br /&gt;
&lt;code class=&quot;bb-code&quot;&gt;_root.sending_lc.send(“lc_name”, “zapusk_func”, 5);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Метод &lt;span style=&quot;font-weight:bold&quot;&gt;send&lt;/span&gt; класса &lt;span style=&quot;font-weight:bold&quot;&gt;LocalConnection в Flash&lt;/span&gt; посылает определённые команды другому объекту &lt;span style=&quot;font-weight:bold&quot;&gt;LocalConnection в другой флешке&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;1. &lt;span style=&quot;font-weight:bold&quot;&gt;_root.sending_lc&lt;/span&gt; — это имя объекта &lt;span style=&quot;font-weight:bold&quot;&gt;Local Connection&lt;/span&gt;, который будет посылать команды;&lt;br /&gt;
2. &lt;span style=&quot;font-weight:bold&quot;&gt;lc_name&lt;/span&gt; — имя канала “связи” между &lt;span style=&quot;font-weight:bold&quot;&gt;флешками&lt;/span&gt;;&lt;br /&gt;
3. &lt;span style=&quot;font-weight:bold&quot;&gt;zapusk_func&lt;/span&gt; — функция, которую нужно запустить в другой флешке. Данная функция обязательно должна быть методом объекта Local Connection другой флешки.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Принимаем команды. Метод connect&lt;/h3&gt;&lt;br /&gt;
&lt;code class=&quot;bb-code&quot;&gt;receiving_lc.connect(“lc_name”);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Метод &lt;span style=&quot;font-weight:bold&quot;&gt;connect&lt;/span&gt;, как бы подключается к “каналу связи” между флешками, по которому в дальнейшем он может получать команды. Единственным параметром этого метода является имя “канала связи”, которое в данном случае &lt;span style=&quot;font-weight:bold&quot;&gt;lc_name&lt;/span&gt;. Мне этот принцип напоминает то, как мы, включая радио, настраиваемся на волну какой-то радиостанции и слушаем её трансляции.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Пример исходного кода&lt;/h3&gt;&lt;br /&gt;
Далее я выложу примеры исходных кодов &lt;span style=&quot;font-weight:bold&quot;&gt;флешек&lt;/span&gt;, которые я использовал &lt;span style=&quot;font-weight:bold&quot;&gt;при создании данного урока&lt;/span&gt;. Весь &lt;span style=&quot;font-weight:bold&quot;&gt;исходный код&lt;/span&gt; содержит достаточно большое количество комментариев, так что, я надеюсь, разобраться в нём у вас не составит большого труда.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Флешка посылающая команды&lt;/h3&gt;&lt;br /&gt;
&lt;pre class=&quot;bb-code-block&quot;&gt;//Делаем так, чтобы флешка не масштабировалась
Stage.scaleMode = “noScale”;
//
//Создаём объект Local Connection
var sending_lc:LocalConnection = new LocalConnection();
//При наведении курсора немного увеличиваем размеры объекта button_mc
button_mc.onRollOver = function() {
        this._xscale = this._yscale=105;
};
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;Флешка принимающая команды&lt;/h3&gt;&lt;br /&gt;
&lt;pre class=&quot;bb-code-block&quot;&gt;//В кратце опишу сегодняшний урок:
//Сегодня мы создадим две флешки, одна из которой будет принимать определённую команду от другой.
//В роли команды будет выступать “ЗАПУСК” вращающегося логотипа сайта flashist.ru
//В общем всё можете увидеть сами, нажав CTRL+ENTER и поклацав на рабочем поле, это будет демонстрация “ЗАПУСКА”
//
//Делаем так ,чтобы флешка не масштабировалась
Stage.scaleMode = “noScale”;
//Создаём переменную “ГРАВИТАЦИИ”, которая будет постепенно величивать скорость “подкинутых” объектов,
//и ускорять их падение
var varGrav:Number = 0.5;
//Создаём массив, в котором мы будем “запоминать” все созданные нами ЛОГОТИПЫ, и переменную, в которой
//мы будем запоминать КОЛИЧЕСТВО всех созданных логотипов.
//Я намеренно не использую для этих целей свойство length класса Array, потому что перед инициализацией
//цикла, а циклы мы в уроке будем тоже использовать, лучше “запомнить” количество объектов массива в
//отдельную переменную, разными опытами доказано, что так цикл будет работать гораздо быстрее.
var logo_array:Array = [];
var varLength:Number = 0;
//Создаём функцию, которая будет “ЗАПУСКАТЬ” новые объекты клипа logo_mc
//
//Переменная varCount показывает какое количество объектов будет создано за раз
function zapusk_func(varCount:Number) {
        //Если varCount не задано при вызове функции, то присваиваем ему значение 1. Что означает, что будет
        //создан, один объект
        if (!varCount) {
                varCount = 1;
        }
        //Запускаем цикл, в теле которого будут создаваться новые объекты.
        for (var i = 0; i&amp;lt; varCount; i++) {
                //”Аттачим” из библиотеки на рабочее поле объект logo_mc
                //
                //Случайно задаём ему координату по X, в пределах ширины флешки.
                //По Y располагаем его на самой границе рабочей области снизу.
                //Так же случайно от 25 до 100 задаём ему параметр _xscale
                varLogo = _root.attachMovie(“logo_mc”, “logo”+_root.getNextHighestDepth()+“_mc”, _root.getNextHighestDepth(), {_xscale:25+random(75), _x:random(Stage.width), _y:Stage.height});
                //Делаем так, чтобы _yscale и _xscale объекта были одинаковы, нужно для того, чтобы сохранить
                //пропорции объекта.
                varLogo._yscale = varLogo._xscale;
                //Добавляем созданный объект в массив logo_array
                _root.logo_array.push(varLogo);
                //”ЗАПОМИНАЕМ” в переменную varLength длину массива (колличество элементов)
                _root.varLength = _root.logo_array.length;
                //Создаём у объекта переменные скорости изменения по оси X, Y и ВРАЩЕНИЯ
                //Величина параметров будет зависить от РАЗМЕРА объекта, чем он МЕНЬШЕ, тем он в среднем
                //будет двигаться и вращаться быстрее.
                varLogo.varSpeedY = (-10)*100/varLogo._xscale;
                varLogo.varSpeedX = (Math.random()*5-Math.random()*5)*100/varLogo._xscale;
                varLogo.varSpeedRotation = (Math.random()*20-Math.random()*20)*100/varLogo._xscale;
        }
}
//Создаём функцию “ПЕРЕМЕЩЕНИЯ” всех созданных объектов.
//
//Тут надо приостановиться и объяснить, почему я делаю так, а не использую Класс Tween или событие
//onEnterFrame для каждого объекта. Про класс Tween в подобных случаях вообще забудьте, он жрёт очень много
//ресурсов. когда количество “передвигаемых” объектов достаточно большое, класс Tween очень не желательно
//использовать, т.к. компьютор пользователя может просто “не потянуть” всю програмнмную анимацию
//и зависенуть. Так же мы не используем событие onEnterFrame для каждого объекта, потому что, опять же,
//в уелях экономии ресурсов компьюетра “дешевле” вызывать одну функцию 30 раз в секунду, чем для 20 объектов,
//по одной функции 30 раз в секунду.
//
//Если этот момент я не очень хорошо объяснил, и вы чего-то непоняли, то просто пропустите его, я думаю вы
//поёмёте, о чём я говорил, когда в разработке Flash приложений столкнётесь с проблемами производительности.
//
function move_func() {
        //Создаём цикл, который будет перебирать все элементы массива logo_array, т.е. все созданные нами
        //объекты
        for (var i = 0; i&amp;lt;_root.varLength; i++) {
                //Для удобства и улучшения производительности “запоминаем” объект, с которым мы будем сейчас работать
                //в отдельную переменную.
                varTarget = _root.logo_array[i];
                //Смещаем объект по осям X и Y, смещение будет равно скорости объекта по этим осям.
                varTarget._y += varTarget.varSpeedY;
                varTarget._x += varTarget.varSpeedX;
                //Так же изменяем параметр _rotation в зависимости от СКОРОСТИ ВРАЩЕНИЯ объекта
                varTarget._rotation += varTarget.varSpeedRotation;
                //Изменяем скорость объекта по оси Y прибавляя к ней значение ГРАВИТАЦИИ, которая будет “тянуть”
                //объект вниз.
                varTarget.varSpeedY += _root.varGrav;
                //Проверяем, если объект опустился достаточно низко за нижний предел экрана, удаляем его, и
                //”стираем” этот элемент из массива logo_array
                if (varTarget._y&amp;gt;Stage.height+50) {
                        //Удаляем объект
                        varTarget.removeMovieClip();
                        //Удаляем элемент под номером i из массива
                        _root.logo_array.splice(i, 1);
                }
        }
}
//Задаёмм интервал для функции ДВИЖЕНИЯ, он будет вызывать её примерно 30 раз в секнду.
setInterval(move_func, 30);
//При нажатии мышки на рабочем поле, будет вызываться функция СОЗДАНИЯ ОБЪЕКТА
onMouseDown = zapusk_func;
//
//Создаём объект класса Local Connection
//
var receiving_lc:LocalConnection = new LocalConnection();
//Т.к. из другой флешки могут вызываться только функции объекта класса Loacal Connection присваиваем
//функцию запуска к функции только что созданного объекта.
receiving_lc.zapusk_func = zapusk_func;
//Как бы “говорим” объекту Local Connection, что нужно ПРИНИМАТЬ данные от “СВЯЗИ” под именем lc_name
receiving_lc.connect(“lc_name”);
//
// www.flashist.ru
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;В заключении&lt;/h3&gt;&lt;br /&gt;
Привожу ссылки на две флешки расположенные на разных HTML страницах:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flashist.ru/files/localconnection/otpravlyaet.swf&quot; class=&quot;bb-url&quot;&gt;http://www.flashist.ru/files/localconnection/otpravlyaet.swf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flashist.ru/files/localconnection/prinimaet_2.swf&quot; class=&quot;bb-url&quot;&gt;http://www.flashist.ru/files/localconnection/prinimaet_2.swf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;А так же стандартные ссылки на пример работающей флешки, и архив к уроку:&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-weight:bold&quot;&gt;&lt;a href=&quot;http://www.flashist.ru/files/localconnection/local_connection.html&quot; class=&quot;bb-url&quot;&gt;Сами флешки (swf)&lt;/a&gt;&lt;/span&gt; | &lt;span style=&quot;font-weight:bold&quot;&gt;&lt;a href=&quot;http://www.flashist.ru/files/localconnection/localconnection.rar&quot; class=&quot;bb-url&quot;&gt;Исходник (fla)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
 <comments>http://www.flashist.ru/2008/02/16/localconnection-ili-kak-vyzvat-iz-odnoj-fleshki-funkciyu-drugoj#comments</comments>
 <category domain="http://www.flashist.ru/taxonomy/term/8">FAQ</category>
 <category domain="http://www.flashist.ru/taxonomy/term/4">Flash</category>
 <category domain="http://www.flashist.ru/taxonomy/term/52">Local Connection</category>
 <category domain="http://www.flashist.ru/taxonomy/term/12">Вопрос-Ответ</category>
 <category domain="http://www.flashist.ru/taxonomy/term/15">Исходники</category>
 <category domain="http://www.flashist.ru/taxonomy/term/16">Уроки</category>
 <pubDate>Tue, 10 Feb 2009 21:58:18 +0300</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">101 at http://www.flashist.ru</guid>
</item>
</channel>
</rss>

