1

我以前也问过类似的问题,但从来没有找到我需要的解决方案。所以我开始一个新的堆栈,不要混淆我的问题,并让我更清楚一点。

我需要做什么

我在一个 html 页面上有多个 flash 对象,它们都是相同的,并且它们都需要与正确的时间同步。在当前状态下,每个人都查询时间服务器,并获取时间,效果很好。但是我想要实现的是第一个加载成为唯一与时间服务器同步的对象,然后其他闪存对象等待它完成,并从该对象加载同步时间。

问题

SharedObjects:在纸面上,这看起来像是完美的解决方案,我得到第一个加载以保存 SO“timestarted”,如果之后任何加载闪存看到这个 SO,它会等待创建“同步时间”SO,并且加载...太棒了!但是没有...... SharedObjects 似乎只在加载闪存时加载 SO,任何更改或闪存加载后的新 SO 对于任何其他闪存来说都是完全未知的,而不是创建它的闪存!(直到重新加载闪光灯)...doh

LocalConnection:稍微复杂一点,但听起来是个不错的解决方案,除了一次闪光之外,任何时候都可以打开连接,呸!

我需要的

简单来说,我需要一种方法来让一个 flash 对象将自己声明为同步器,而其他对象则听!我以为很简单的事情,结果却变得如此复杂。我需要任何建议,关于该怎么做的建议。

4

3 回答 3

2

如果你可以使用一点点 javascript,你可以使用ExternalInterface来做到这一点。让电影调用一个小的 js 脚本来跟踪加载时间的人,然后让其他闪光灯注册回调。一旦第一个 flash 有时间,调用 js 并让它更新其他两个。

于 2010-01-28T12:35:38.757 回答
0

我认为您真正要寻找的是 LocalConnection 对象https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

它将允许您的 swf 相互交谈。

于 2010-01-28T16:17:08.527 回答
0

也许我误解了这个问题,但这有效:

第一瑞士法郎(同步器):

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

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

init();

function init():void{

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; trace(SharedObject.getLocal("timer","/").data.timer); SharedObject.getLocal("timer","/").flush();

tf.text = timeValue.toString();

}

2nd swf (synchee)

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

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

init();

function 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 知道它们是同步器,而不是同步器?

于 2010-02-04T23:27:26.470 回答