PDA

Просмотр полной версии : Одна флешка, управляет другой? Как?


джонатан
28.03.2008, 00:25
Доброго времени суток, уважаемые Флеш разработчики!

На этот раз, я хочу узнать, возможноли, и если возможно, то как сделать так, чтобы, одна флешка управляло другой, при условии, что они размещены на одной HTML странице.
Для того, чтобы Вы, максимально точно поняли мой вопрос, предлагаю ознакомиться с данным эскизом:

http://img221.**************/img221/2411/12345fl7.jpg

Предположим, что на "Флешке №1, установлена менюшка с кнопками" Как мне сделать, чтобы например при нажатии на кнопку в Флешке 1, Флешка 2, произвела действие:

gotoAndPlay(7);

Заранее благодарю, всех откликнувшихся!

olexandr
28.03.2008, 00:54
лично не сталкивался, но вроде бы необходимо читать help про класс localConnection (http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001792.html)
знающие люди ответят более точно :)

wvxvw
28.03.2008, 01:08
LC замечательная штука, но на маках раньше не работала. (как сейчас - не знаю) Надежнее через ЖаваСкрипт - не будет проблем с совместимостью, + меньше головной боли если пользователь откроет ту же страницу в 2+ окнах и т.п.

Molecula
28.03.2008, 01:24
Да, всё правильно и ничего тут сложного нет.
Допустим перва флешка, в которой должен произойти переход на 7 кадр, или любое действие, в ней будет такой код (1-й кадр):
var aLocalConnection:LocalConnection = new LocalConnection();
aLocalConnection.connect("demoConnection");
aLocalConnection.printOut = function(aString:String):Void{
mc.gotoAndStop(7);
}
Где, mc - есть её мувик.

Вторая флешка: в ней есть кнопка but, по нажатию которой, тот mc в 1-й флешке должен перейти на 7-й кадр. Вот код 2-й флешки:
var sending_lc:LocalConnection = new LocalConnection();
but.onPress=connect;
function connect(){
sending_lc.send("demoConnection", "printOut");
}
Вот и всё.

джонатан
28.03.2008, 01:57
Супер! Все работает! Я вам очень признателен! Спасибо огромное!
Только вот еще один вопрос. А если еще и третья флешка будет, которая должна перейти к примеру на 14-ый кадр. Что в ней то писать?

olexandr
28.03.2008, 02:16
создавать еще одно соединение!?

джонатан
28.03.2008, 02:28
Тоесть я так понимаю, что надо, тут вносить изменения:

var sending_lc:LocalConnection = new LocalConnection();
but.onPress=connect;
function connect(){
sending_lc.send("demoConnection", "printOut");
}

Вопрост только где именно???

Fernando Costa
28.03.2008, 02:35
когда то давным-давно делал. Чат на локал конекшне. Код не очень хороший(точнее просто галимый). Но работает и думаю принцип поймете :victory:

джонатан
28.03.2008, 03:04
Fernando Costa
Спасибо конечно огромное, но там так много букаф, что я ничерта не понял... И все мои попытки никчему не привели... Как я только не пытался создать новое соединение, ничего не работает...

Расскажите уже ктонибудь пожааалуйста... А то я глуп пока еще :(

З.Ы. Админы на этот раз я читал хелп! Много читал и долго. Но всеравно не разобрался :(

Mr. Fixit
28.03.2008, 04:58
в 1файле - 40строк
в 2м - 100...
ну работайте, если нужно.

"Хочешь добиться, добивайся сам" ©

wvxvw
28.03.2008, 10:24
Вобщем, если сильно хочется с LC это делать и чтобы можно было открывать несколько окон, то принцип такой: обе флешки знают первоначальное имя соединения, но как только соединение произошло - флешка, которая сендит генерит уникальное имя для нового соединения и высылает его флешке, которая коннектится, после чего закрывает соединение. Вторая флешка после этого так же закрывает соединение и конектится по новой на уникальное соединение. Единственное что... ЛК работает медленнее чем скрипт внутри плеера, поэтому нужно принимать во внимание, что все эти переконекты произойдут не сразу а через доли секунды после. Ну и соответственно учесть это в реализации, т.е. все шаги должны проверять успешное окончание предыдущего шага, а не просто выполнятся один за другим.
Да, по поводу третей флешки... ну, даж не знаю, ЖаваСкрипт - как-то проще и надежнее выглядит. Больше чем 1 флешка не может приконектится к одному соединению, это значит, что прийдется создавать 2 соединения и подключаться и туда и туда.

etc
28.03.2008, 10:30
http://www.flasher.ru/forum/showthread.php?t=82922

alexcon314
28.03.2008, 10:50
к вопросу о LocalConnection. попробуйте посмотреть вот этот пример. он очень простой.

джонатан
28.03.2008, 15:12
alexcon314 Сенк ю! Тут гораздо понятнее. Я даже было решил что я во всем разобрался. Но на практике, оказалось, что это не так. Давайте я покажу Вам, что я сделал, быть может вы укажете мне где я допустил ошибку.

Вобщем в файле, были две флешки, "a" и "c". На каждой из которых, имеется по две текстовые области (одна чтобы отправлять, а вторая, чтобы получать) и кнопка отправить.
Во флешке "a" прописано:
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOa");
listener.BswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("aTOb", "AswfSays", reply.text);
reply.text = "";
};

Во флешке b:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOb");
listener.AswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("bTOa", "BswfSays", reply.text);
reply.text = "";
};

Я создал флешку ц и прописал в ней следующее:
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOc");
listener.BswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("cTOb", "CswfSays", reply.text);
reply.text = "";
};
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOc");
listener.AswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("cTOa", "CswfSays", reply.text);
reply.text = "";
};

И соответственно внес изменения во флешки "а" и "b", получилось следующее:
A:
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOa");
listener.BswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("aTOb", "AswfSays", reply.text);
reply.text = "";
};

//Мои внесения.

var listener:LocalConnection = new LocalConnection();
listener.connect("cTOa");
listener.CswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("aTOc", "AswfSays", reply.text);
reply.text = "";
};

B:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOb");
listener.AswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("bTOa", "BswfSays", reply.text);
reply.text = "";
};

//Мои внесения.

var listener:LocalConnection = new LocalConnection();
listener.connect("cTOb");
listener.CswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("bTOc", "BswfSays", reply.text);
reply.text = "";
};

Итог: Теперь обмениваются между собою флешка "a" и флешка "c", а флешка "b" не принимает, не отправляет.

Где же ошибка(и)?

Заранее благодарен, за убитое время, на меня дурака :wacko:

alexcon314
28.03.2008, 17:49
первое что бросилось в глаза: у вас на ОДНУ И ТУ ЖЕ кнопку привязаны РАЗНЫЕ функции. выполняться будет та, которую привязали последней.
ну а вообще вот:

//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerB:LocalConnection = new LocalConnection();
listenerB.connect("bTOa");
listenerB.BswfSays = function(message) {
answer.text = message;
};
var listenerC:LocalConnection = new LocalConnection();
listenerC.connect("cTOa");
listenerC.CswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("aTOb", "AswfSays", reply.text);
sender.send("aTOc", "AswfSays", reply.text);
reply.text = "";
};
//bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerA:LocalConnection = new LocalConnection();
listenerA.connect("aTOb");
listenerA.AswfSays = function(message) {
answer.text = message;
};
var listenerC:LocalConnection = new LocalConnection();
listenerC.connect("cTOb");
listenerC.CswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("bTOa", "BswfSays", reply.text);
sender.send("bTOc", "BswfSays", reply.text);
reply.text = "";
};
// ccccccccccccccccccccccccccccccccccccccccccc
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerA:LocalConnection = new LocalConnection();
listenerA.connect("aTOc");
listenerA.AswfSays = function(message) {
answer.text = message;
};
var listenerB:LocalConnection = new LocalConnection();
listenerB.connect("bTOc");
listenerB.BswfSays = function(message) {
answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
sender.send("cTOa", "CswfSays", reply.text);
sender.send("cTOb", "CswfSays", reply.text);
reply.text = "";
};
// чтобы слать сообщения избирательно, нужно делать двае кнопки.

только задуматься о том, как все это добро будет работать ОДНОВРЕМЕННО в двух разных окнах браузера стоит. и стоит прислушаться к _etc в топике, ссылку на который он дал. ( вариант Nox'a с JS лично мне менее симпатичен просто :), хорошо когда все в одном месте).
данный пример не более чем упражнение преред решением действительно серьезной задачи. имейте это в виду.
кстати, Fernando Costa дал вам еще один неплохой вариант законнектить несколько флешек. у него насколько я понял пересылаются сообщения не напрямую а через "сервер", который "помнит" всех своих клиентов в списке и шлет в адрес переданное ему сообщение.

джонатан
28.03.2008, 21:11
alexcon314 Огромное спасибо за помощь! Я кстати уже был разобрался. Все понял. Вот влез написать, что уже все понял как делать, и тут Вы все расписали.
Спасибо товарищи! Одного зайца убил с Вашей помощью. Теперь буду рассматривать другие варианты, в том числе и те, что с JS.
Еще раз спасибо!

Вот для болванов вроде меня, я отправляю подробный FAQ, в котором я расписал все детально, и очень подробно. Уверен, вопросов после прочтения не возникнет!

19182

джонатан
30.03.2008, 04:25
Вот теперь буду вас мучать вопросами по поводу кода от госоподина __etc
Конечно, же с его кодом все работает гораздо корректнее, не смотря на то, что маловероятно, что кто-то захочет дважды открыть один и тот-же сайт, темболее в разных окнах. Но всеже лучше подстраховаться и на этот случай.
А теперь вопрос. Этот код, кординально отличается от предыдущего, и поэтому я снова прошу вашей помощи. Разпишите пожалуйста, кому не трудно, и желательно поподробнее, что есть что в этом коде. А то я смотрю на него, прям как баран на новые ворота.

main_lc = new LocalConnection();
main_lc.onConnect = function(id) {
trace('Connection id: '+id);
}
exchange_lc = new LocalConnection();
isObserver = true;
connectionId = "lc_"+(new Date().getTime());
exchange_lc.onGetId = function(id) {
connectionId = id;
exchange_lc.close();
createMainLC();
}
exchange_lc.onStatus = function(status) {
if (status.level == 'status') {
createMainLC();
} else {
exchange_lc.connect('exchange');
}
}
exchange_lc.send('exchange', 'onGetId', connectionId);
createMainLC = function () {
if (isObserver) {
main_lc.send(connectionId, 'onConnect',connectionId);
} else {
main_lc.connect(connectionId);
}
}

Естественно коментариев автора, я не дождусь, но надеюсь, что хоть кто-то всеже поможет мне.

Заранее, искренне благодарен. Низкий Вам поклон дорогие друзья.

etc
30.03.2008, 15:48
А что именно непонятно в коде? Я вроде и комментарии в той теме оставил. Если внимательно прочитать тему, то никаких вопросов не должно возникнуть.

AL.exe
30.03.2008, 18:21
Может, я и извращенец, но я бы попробовал сначала сделать вообще через sharedObject :)

джонатан
30.03.2008, 20:13
__etc Прочел эту тему очень много раз. Может там и все ясно, но только не мне. Не забывайте, что я в этом деле еще совсем новичок. А непонятно мне в коде, что куда писать. Тоесть как я уже говорил у меня 3 флешки, "A", "B" и "C". И что куда писать я не понимаю. Код значительно отличается от передыдущего варианта, в котором я всетаки с горем пополам разобрался. А то что если открыть эту страницу в дувух окнах будет глючить, ну никуда не катит. Хочу сделать, чтоб уже все было круто. Помогите пожалуйста!

etc
31.03.2008, 01:17
Ну ёпрст, то, что вы поставили аватару «я не знаю ActionScript» вас не спасёт. Если вы не понимаете того, что написано в теме, займитесь тогда чем-нибудь другим. Проблема ваша в том, что вы на самом деле не хотите знать AS или просто вселенская лень. Если бы вы хотели что-то знать, то вашего нытья по всем темам и аватаров с подписями давно бы не было.
У меня вообще возникли подозрения, что вы делаете работу, в которой нифига не разбираетесь, за счет участников форума.

джонатан
31.03.2008, 17:25
В которой не разбираюсь, не делаю. Вот если разберусь, то буду делать.

Molecula
31.03.2008, 17:39
Читайте и рисуйте, так лечге будет понять смысл __etc.
Осознав суть - перенесите на свой проект.

джонатан
31.03.2008, 21:52
Ну спаибо и на этом друзья! Всеравно Вы мне очень сильно помогли! Огромнейшее спасибо!

З.Ы. то _etc жили бы Вы в такой попе в какой живу я, где во всей стране нет ниодних курсов по Action Script. Поняли бы меня. А как я могу во всем этом разобраться когда не знаю ниодного языка програмирования + работой загружен по полнолй, и вкалываю за копейки потому, что знаю мало, а учить все нет времени, т.к. жить нужно, а если я буду учиться то, что-то заработать нерелально.

Fernando Costa
31.03.2008, 22:17
У вас есть интернет, больше ничего не надо. Вы просто не хотите думать, мы тут вам все разжевали, с исходниками даже! Вам еще очень повезло.

ЗЫ:Извините конечно, но без знаний зарабатывать деньги можно грузчиком.

джонатан
31.03.2008, 22:48
Fernando Costa У меня есть определенные знания. И кога я задаю здесь вопросы, я делаю это исключительно для того, что-бы повысить их. Все, что дали с исходниками, за это большое спасибо. Я все разобрал и все понял, и в очередной раз благодаря Вам, мои знания пополнились новой фишкой. А сейчас я спрашиваю про другую "фишку" и если Вам так трудно ответить, то просто не надо этого делать. Наставления о правильной жизни, меня совершенно не интерисуют. Я не о них спрашиваю. А если по каким, либо причинам, Вы не желаете отвечать, на мой вопрос, то не делайте этого и все. Я не обижусь и винить никого не буду. А если всеже решитесь помочь начинающему, то естественно, я буду Вам очень признателен.

etc
31.03.2008, 23:30
Ну спаибо и на этом друзья! Всеравно Вы мне очень сильно помогли! Огромнейшее спасибо!

З.Ы. то _etc жили бы Вы в такой попе в какой живу я, где во всей стране нет ниодних курсов по Action Script. Поняли бы меня. А как я могу во всем этом разобраться когда не знаю ниодного языка програмирования + работой загружен по полнолй, и вкалываю за копейки потому, что знаю мало, а учить все нет времени, т.к. жить нужно, а если я буду учиться то, что-то заработать нерелально.
А кому щас легко? Почему именно для вас должны быть исключения? Учите.

джонатан
01.04.2008, 20:27
Спасибо огромное!