PDA

Просмотр полной версии : Обновление Flashvars через 1 секунду


NaFigator
05.05.2009, 19:27
Доброго времени суток. У меня возникла вот такая проблема.

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

Подскажите, можно ли вообще както задать ролику задачу пересчитывать FlashVars каждую секунду?

вот код ролика:
var main_url = "http://static.mysite.ru/";
texta.text=_level0.user_name;
user_hp.text=_level0.hp+" / "+_level0.max_hp
user_mana.text=_level0.mana+" / "+_level0.max_mana

_root.hp_bar._width = int(_level0.hp / _level0.max_hp*111);
_root.mana_bar._width = int(_level0.mana / _level0.max_mana*88);

if(_level0.user_clan!="none"){
_root.createEmptyMovieClip("container_mc1", 1);
container_mc1.loadMovie(main_url + "flash/clans/" +_level0.user_clan + ".swf");
container_mc1._x=15;
container_mc1._y=18;
}

if(_level0.user_align!="none"){
_root.createEmptyMovieClip("container_mc2", 2);
container_mc2.loadMovie(main_url + "flash/clans/align_" +_level0.user_align + ".swf");
container_mc2._x=158;
container_mc2._y=18;
}


в ролике есть единственный кадр и несколько слоев для размещения динамический текстовых блоков.

iNils
05.05.2009, 19:38
Данные FlashVars считываются единожды при инициализации ролика. Потому их менять бесполезно.
Для связи флеше с js есть класс ExternalInterface.

NaFigator
05.05.2009, 20:42
Данные FlashVars считываются единожды при инициализации ролика. Потому их менять бесполезно.
Для связи флеше с js есть класс ExternalInterface.

Прошу прощения, покопался яв документации, но всеравно недопонял =(
можно,чуточку поконкретнее?

iNils
05.05.2009, 20:46
Что именно вы недопоняли?

NaFigator
05.05.2009, 20:53
1. как я понял нужно использовать дополнительный яваскрипт типа swfobject
2. а вот как нужно переписать код во флэшке не ясно =(
будут ли переменные так же храниться в _level0 ? Каким образом запрограммировать перезапись значений переменных через 1 секунду?

iNils
05.05.2009, 20:57
1. swfobject не имеет ни какого отношения к текущей задаче.
2. Внутри флеша пишете функцию, которую вызывает js, эта функция изменяет значения нужных вам параметров. Вызов функции раз в секунду делается через функцию setInterval.
То есть, js:setInterval -> js:function -> as:function -> as:variable

Stargazer
05.05.2009, 20:59
1. как я понял нужно использовать дополнительный яваскрипт типа swfobject

Вы не в том направлении поняли.

ExternalInterface позволяет вам вызвать функцию js и получить из неё результат. Либо наоборот - позволяет зарегистрировать функцию as так, чтобы она была доступна из js.

NaFigator
05.05.2009, 21:31
точно! как передать одну переменную я примерно понял

import flash.external.*;

ExternalInterface.addCallback("sendFromJS", null, recieveFromJS);

function recieveFromJS(t) {
_root.theText.text = t;
}
Но теперь вопрос, можно ли передать массив? Если да, то как обращаться к членам массива? или придется передавать строку, а затем ее парсить?

По сути нужно передать 4 переменные.

Stargazer
05.05.2009, 21:41
Я нормально принимал переменную класса Object.

NaFigator
05.05.2009, 22:15
тоесть по сути ассоциативный массив можно передать из яваскрипта во флэш?

Stargazer
05.05.2009, 22:43
Почему "по сути"? Переменную типа Object (с моей точки зрения это не то же самое, что ассоциативный массив) можно передать из javascript во флеш. По крайней мере, 4 числа в одном Object'е передать точно возможно.

NaFigator
06.05.2009, 01:52
Почему "по сути"? Переменную типа Object (с моей точки зрения это не то же самое, что ассоциативный массив) можно передать из javascript во флеш. По крайней мере, 4 числа в одном Object'е передать точно возможно.

Если не сожно, дай пример кода во флэшке. как ты обращаешся затем к переменным?
Ну а если совсем не сложно макет объекта на яваскрипте :rolleyes:

ато чтото я не пойму до конца.

Stargazer
06.05.2009, 13:42
var extData:Object= ExternalInterface.call("collectData_toFlash");

В js примерно так:
function collectData_toFlash(){
var obj= { a: 100, b: 200, c: 300, d: 400 };
return obj;
}

По идее, и с callback должно сработать.

NaFigator
07.05.2009, 01:40
огромное спасибо =)