【问题标题】:(as3) Sync data between 3 or more identical flash objects on the same page(as3) 在同一页面上的 3 个或更多相同的 flash 对象之间同步数据
【发布时间】:2010-01-28 12:31:01
【问题描述】:

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

我需要做什么

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

问题

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

本地连接: 稍微复杂一点,但听起来是个不错的解决方案,除了只有一个闪光灯可以随时打开连接,gah!

我需要什么

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

【问题讨论】:

    标签: flash actionscript-3 synchronization localconnection shared-objects


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      它可以让你的 swf 互相交谈。

      【讨论】:

        【解决方案3】:

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

        第一个 swf(同步器):

        
        
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-17
          • 1970-01-01
          • 1970-01-01
          • 2013-01-18
          • 2020-06-18
          • 1970-01-01
          • 2010-09-19
          相关资源
          最近更新 更多