1

以前に似たようなことを尋ねたことがありますが、必要な解決策には決して行きません。それで、私の問題を混乱させず、少し明確にするために、新しいスタックを開始しています。

私は何をする必要がありますか

HTML ページに複数の Flash オブジェクトがあり、それらはすべて同一であり、すべてを正しい時刻に同期する必要があります。現在の状態では、それぞれがタイムサーバーにクエリを実行し、時間を取得します。これはうまく機能しています。しかし、私が達成したいのは、タイムサーバーと同期する唯一のものになるようにロードする最初のものであり、その後、他のフラッシュオブジェクトはそれが終了するのを待ち、そのものから同期時間をロードします。

問題

SharedObjects: 紙の上では、これは完璧な解決策のように縫い合わせられています。SO を保存するために最初にロードするものを取得します。それをロード...素晴らしい!しかし、いいえ... SharedObjects は、フラッシュのロード時にのみ SO をロードするように見えます。フラッシュがロードされた後の変更、または新しい SO は、それを作成したフラッシュ以外のフラッシュにはまったく知られていません! (フラッシュがリロードされるまで)...doh

LocalConnection: 少し複雑ですが、一度に 1 つのフラッシュしか接続を開くことができないことを除けば、良い解決策のように思えます。

必要なもの

簡単に言えば、1 つのフラッシュ オブジェクトが自分自身を同期側として宣言し、他のオブジェクトがリッスンするようにする方法が必要です。とてもシンプルだと思っていたことが、とても複雑であることがわかりました。何をすべきかについての提案、アドバイスが必要です。

4

3 に答える 3

2

少しの JavaScript を使用できる場合は、ExternalInterfaceを使用してこれを行うことができます。誰が時間をロードしているかを追跡する小さな js スクリプトをムービーに呼び出してもらい、他のフラッシュにコールバックを登録させるだけです。最初のフラッシュに時間がかかったら、js を呼び出して、他の 2 つを更新します。

于 2010-01-28T12:35:38.757 に答える
0

多分私は質問を誤解していますが、これはうまくいきます:

1st 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は、シンチャーではなくシンチであることを認識しますか?

于 2010-02-04T23:27:26.470 に答える
0

あなたが本当に探しているのは LocalConnection オブジェクトだと思いますhttps://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

これにより、swf が互いに通信できるようになります。

于 2010-01-28T16:17:08.527 に答える