(as3) Синхронизация данных между 3 или более одинаковыми объектами флэш-памяти на одной странице - PullRequest
1 голос
/ 28 января 2010

Я спрашивал что-то подобное раньше, но никогда не обращаюсь к нужному мне решению.Поэтому я запускаю новый стек, чтобы не путать мои проблемы и немного прояснить ситуацию.

Что мне нужно сделать

У меня есть несколько flash-объектов в htmlстраницы, они все идентичны, и все они должны быть синхронизированы с правильным временем.В своем текущем состоянии каждый запрашивает сервер времени и получает время, которое прекрасно работает.НО, чего я хочу добиться - это загрузить первую, которая будет единственной, которая синхронизируется с сервером времени, а затем другие флеш-объекты ждут его завершения и загружают время синхронизации с этой.

Проблема

SharedObjects: На бумаге это выглядит как идеальное решение, я получаю 1-ую загрузку, чтобы сохранить SO "timestarted", если какая-либо загрузочная вспышка после этого видит этоТАК, он ждет создания "synctime" ТАК, и загрузите это ... здорово!Но нет ... SharedObjects появляются только для загрузки SO во время загрузки флэш-памяти, любых изменений или нового SO после того, как флэш-загрузка полностью неизвестна любой другой флэш-памяти, кроме той, которая ее создала!(пока не будет перезагружена вспышка) ... doh

LocalConnection: немного сложнее, но звучит как хорошее решение, за исключением того, что только одна вспышка может открыть соединение в любой момент, га!

Что мне нужно

Проще говоря, мне нужен способ, чтобы один объект flash объявил себя в качестве синхронизатора, а другие прослушали!Что-то, что я думал, было бы так просто, но оказалось так сложно.Мне нужны какие-либо предложения, советы о том, что делать.

Ответы [ 3 ]

2 голосов
/ 28 января 2010

Если вы можете использовать чуть-чуть JavaScript, вы можете сделать это, используя ExternalInterface . Сделайте так, чтобы фильмы вызывали небольшой js-скрипт, который отслеживает, кто загружает время, а другие вспышки просто регистрируют обратные вызовы. Как только у первой вспышки будет время, вызовите js и позвольте этому обновить две другие.

0 голосов
/ 05 февраля 2010

Может быть, я неправильно понимаю вопрос, но это работает:

1-й swf (синхронизатор):

</p>

<p>import flash.net.SharedObject;
import flash.utils.Timer;</p>

<p>var time:String;
var timeValue:int;
var tf:TextField;</p>

<p>init();</p>

<p>function init():void{</p>

<pre><code>var timer:Timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, blah);
timer.start();

tf = new TextField();
addChild(tf);

SharedObject.getLocal("timer","/")

}

function blah (e: TimerEvent): void { TIMEVALUE ++; SharedObject.getLocal ("timer", "/"). Data.timer = timeValue; трассировки (SharedObject.getLocal ( "таймер", "/") data.timer.); SharedObject.getLocal ( "таймер", "/") на одном уровне ();.

tf.text = timeValue.toString();

}

2-й swf (синчи)

import flash.net.SharedObject; import flash.utils.Timer;

var time: String; var timeValue: int; var tf: TextField;

INIT ();

функция init (): void {

var timer:Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, blah);
timer.start();

tf = new TextField();
addChild(tf);

}

function blah (e: TimerEvent): void { timeValue = SharedObject.getLocal ("timer", "/"). data.timer; tf.text = timeValue.toString (); } Я знаю, что они не идентичны, но было бы достаточно просто сохранить «загруженные» свойства в SO, поэтому впоследствии загруженные SWF-файлы знают, что они являются синхронизаторами, а не синхронизаторами?

0 голосов
/ 28 января 2010

Я думаю, что вы действительно ищете объект LocalConnection https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

Это позволит вашим swf'ам общаться друг с другом.

...