PDA

Просмотр полной версии : Взаимодействия между swf-ками


the_losik
21.08.2002, 14:58
Допустим у меня в html две swf-ки. Могу-ли я из одной swf управлять другой. Т. е. передавать туда хотябы goto ... ?

Подскажите пожалуйста.

УильямБрэдберри
21.08.2002, 15:04
можешь
и не только гото
можешь вообще все управление разместить в одной флэшке, а анимацию в другой

http://www.flasher.ru/src/stats_1850/

только там предпросмотр не работает

мой аккаунт в дауне

the_losik
22.08.2002, 12:13
УильямБрэдберри всегда приходит в трудную минуту.

Спасибо :)

Palindrome
22.08.2002, 20:58
Это все очень интересно, но не особо понятно. Во-первых, это МХ. А во-вторых XML. Про XML не знаю ничего. :(

У меня на странице есть две swf-ки: 1.swf и 2.swf - одинаковые пункты меню, только в 1 - с анимацией, а в 2 - быстрое меню. В корне у 2 есть массив из переменных, содержащих подсказки для кнопок, показывающиеся в текстовом поле при наведении на любую из кнопок. Такая же фигня и в 1, а это избыточный код.

Внимание, вопрос! Как мне на 5-м Флэше сделать, чтобы при наведении на те же кнопки в 1-м он читал переменные из 2-го и показывал их в своем текстовом поле. И естественно, чтобы это все происходило мгновенно, так как загружены оба свф.

Поэтому прошу помочь с кодом.

Заранее благодарен,

Palindrome

Palindrome
22.08.2002, 21:11
Извиняюсь. Даже не так. А изменить не успел - время истекло.

Как сделать, чтобы при наведении на кнопки в 1-й свф подсказки появлялись в текстовом поле 2-й свф? Во как надо!

AnGL
23.08.2002, 12:18
Во первых поиск рулит.
Во вторых:
Воспользуйся JS и обменивайся данными между мувиками скока хочешь. Есть и более простой вариант. Обращайся к мувику прямым методом:

mymovie.swf?myvar=13 ...что то типа этого.

С уважением... :rolleyes:

Palindrome
23.08.2002, 21:07
Хоть убей - не нашел ничего из того, что могло бы мне помочь.
А надо-то мне всего-то, чтобы при наведении на кнопку одного свф в другом появилась выплывающая подсказка.
Типа:
Кнопка в 1-м свф
on (rollOver) {
_root.currentMenu = _root.menuItems.News;
}
Чтобы _root.currentMenu = _root.menuItems.News выполнялось в свф №2.
Как это сделать? Javascript не знаю.

С уважением,

Palindrome

AnGL
26.08.2002, 12:05
http://www.macromedia.com/support/flash/ts/documents/java_script_comm.htm

http://www.macromedia.com/support/flash/ts/documents/flash_to_flash_comm.htm

С уважением... :rolleyes:

DeliMIter
26.08.2002, 13:45
2AnGL

mymovie.swf?... это не способ обмена данными, это способ задания начальных параметров. Сбил я тебя с пути истинного ;))))

Palindrome
26.08.2002, 14:09
Прочитал я все, что ты мне дал, но либо я не допер, либо это не совсем то, что мне нужно. Мне не нужно переслать переменную в другой свф. Напиши мне исходник, неужели это для тебя так сложно? Там же всего пара-тройка строк!

Описываю подробно, как у меня все устроено. В основе html у меня фреймовая структура - 3 фрейма: left, top, main. Соответственно, к каждому из них свой html. В Левом у меня navleft.swf, в Верхнем - navtop.swf. Мне нужно, чтобы при наведении на кнопку в navleft.swf он не передавал переменную, а navtop.swf просто брал у себя из массива данные и присваивал переменной currentMenu=menuItems.School к примеру, а когда rollout в navleft, то в navtop currentMenu=undefined. Вот и все. Но как сделать это - ума не приложу. Про swliveconnect=true я понял и уже поставил, но так как у меня свф-ки находятся в разных html-документах, будет ли это все работать?

Помогите, люди, пожалуйста!
Заранее благодарен,
Palindrome

DeliMIter
26.08.2002, 14:32
2Palindrome

Людям вопросы задавать проще чем за минуту найти самому?

flasher.ru -> исходники -> программирование -> JavaScript

Есть примеры передачи данных, на любой вкус.

Palindrome
26.08.2002, 17:17
Если бы я не посмотрел бы все, я не стал бы поднимать этот вопрос. Но дело в том, что я все посмотрел и либо это не подошло, либо я этого не понял. Как я уже говорил раньше, я не знаю JavaScript и VBScript. Самый подходящий пример, который я нашел - это Flash - JS. Но там два одинаковых мува с именем Movie. И функции на JS c VBS написаны с именем Movie. А у меня navleft и navtop. Я не понимаю как переделать это, чтобы все взаимодействовало. Movie - он один. А кто куда посылает и откуда принимает - не понимаю. Неужели трудно подсказать один раз, чем уже 5 раз посылать меня в поиск подходящего исходника, которого нет!

С уважением,
Palindrome

DeliMIter
27.08.2002, 13:49
Я брал тот же исходник, не знал JS ну и т.д. Поковырялся в исходнике и все (ну, не все, но то, что нужно было) понял. С учетом того, что AS и JS практически идентичны, не так уж это сложно.

Успехов ;)

AnGL
27.08.2002, 15:42
DeliMIter

:) Черт... Как лениво исходники кидать, если б ты знал )))

Народ! Не уж то сложно разобраться в этой фигне JS+FLASH :(

Замусоленая тема...

ЗЫ: Еще есть другой, более продвинутый метод - LocalConnection. Лейте с сайта макромедии апдэйт к FLASH хелпу, там все написано... ;)

Palindrome
27.08.2002, 17:46
to AnGL & DeliMIter

По поводу сложности темы - да, сложно. Не было б сложно, не задавал бы вопросов. А также пытался разобраться сам - не разобрался. Увы :(

По поводу localConnection - насколько я понимаю, это МХ, а я делаю на 5-м (см. выше).

По поводу лени - неужели не лень переливать из пустого в порожнее, отправляя меня то в поиск, то говорить, что это просто?

У меня время и терпение есть держать открытым этот вопрос ;)

С уважением,
Palindrome the Настойчивый :)

DeliMIter
28.08.2002, 22:30
@#$@#$%!!!!! *******[censored]****!!!! ПИП!!!

Публикуешь свои флэшки с шаблоном FSCommand. Запихиваешь код OBJECT'ов и скрипта в одну аштээмэлину. Не забудь поставить <бр><бр><бр> между ними. Вообще имеет смысл назвать их не 1.swf а более длинно и мнемонически. Все беды от того, что у тебя верхняя пуговица расстегнута. В OBJECT'ах есть параметр ID. Это и есть имена твоих эсвээфок внутри странички. Допустим первый у тебя зовется ID="M1" а второй ID="M2".

function M1_DoFSCommand(command, args) {
if (command=="sendvar") M2.SetVariavle("/:var_from_other_movie", args);
}


В мувике M2 пишешь onClipEvent (enterFrame) который следит в руте за изменением переменной var_from_other_movie и если она изменилась, делает выводы.

В следующий раз прольется чья-то кровь.

DeliMIter the fiery.

Nox Noctis
29.08.2002, 02:34
2DeliMIter

темная ночь...
один пуля застрял в проводах
другой пуля всю ночь по степи
за комбатом гонялся...

:D

Palindrome
29.08.2002, 12:23
Спасибо хоть за что-то иное, чем посылание куда-то :)

Из-за столь краткого объяснения сразу возникает ряд вопросов:
1. (Очень жаль, что ты внимательно не читал то, что я писАл выше.) У меня флэшки находятся в разных html: одна в left.html, другая в top.html. Оба эти документа составляют фреймовую структуру. Как поступать в этом случае?

2. Зачем во втором муве делать onClipEvent , если мне нужно изменить переменную динамического текстового поля, которая и так изменяется динамически?

3. Я так понимаю, что код, который ты дал относится к html-документу и является JavaScript'ом. А что мне писАть в 1-й флэшке с FSCommand?

Заранее благодарен за более полный и доходчивый ответ :)

Palindrome the bloodless ;)

DeliMIter
29.08.2002, 15:43
1 Разные HTMLки грузимые в одно место становятся одной. Адресация что-то вроде window.document.framename.objectname

2 Сам такой

3. fscommand("sendvar", your_var);

Palindrome
29.08.2002, 21:29
Ну, наконец-то!!!

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

parent.topnav.document.navtop.SetVariable("currentMenu", args); где topnav - имя фрейма, a navtop - имя swf

Спасибо за все! Это было забавно :) (Я имею в виду переписку)

Одна проблема - когда две свф-ки коннектятся, до того как я наведу на нужную кнопку у меня уже в динамическом окне появляются три загадочные буквы "lse". К чему бы это? И как с этим справиться?

Заранее благодарен за оперативный ответ :)

Palindrome the "Всегда добивающийся своей цели"

Palindrome
29.08.2002, 21:45
Следующий код:

<SCRIPT LANGUAGE=JavaScript>
<!--
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function navleft_DoFSCommand(command, args) {
parent.topnav.document.navtop.SetVariable("currentMenu", args);
}
if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&
navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('Sub navleft_FSCommand(ByVal command, ByVal args)\n');
document.write(' call navleft_DoFSCommand(command, args)\n');
document.write('end sub\n');
document.write('</SCRIPT\> \n');
}
//-->
</SCRIPT>

Не работает в Opera и NN. 6-й IE все отлично понимает. Что нужно переделать, чтобы они понимали его тоже. У меня 6-я Опера и 6-й Нетскейп.

Еще раз повторюсь, что код, данный выше сопоставим для меня с китайским техническим текстом :) поэтому я и прошу помощи

Palindrome the Вечно лезущий с глупыми вопросами :)

DeliMIter
30.08.2002, 17:52
Вот мы и подобрались. Даю тебе последний очень ценный волшебный пендель. В javascript'е есть команда alert(message). Аналог trace(message) из Flash AS. В качестве message может быть все, что угодно - строки, объекты, переменные. Так можно узнать, что же и как же происходит, что куда передается или наоборот не передается. Вперед.

P.S. В Опере, Шкафе и Мозилле проходит ТОЛЬКО getURL("javascript:your_function('parameter')");