0

私は2つの主要な部分に基づくプロジェクトに取り組んでいます。最初の部分はFlexによって行われ、2番目の部分はフラッシュプロフェッショナルプロジェクトであり、PROJECTNAME.flaファイルとPROJECTNAME.asファイルが含まれています。私の質問は、フレックス部分から.flaプロジェクトにいくつかのパラメーター(ユーザー名、ユーザーの画像など)を設定する方法です。主な手順を以下に説明します。

  1. フレックスパーツでサーバーに接続し、ユーザーのステータスを取得します
  2. 上記のようにフラッシュプロフェッショナルプロジェクトによって作成された.swfを実行します
  3. .swfファイルにいくつかのパラメータを設定します。

私はたくさんグーグルで検索しましたが、解決策は見つかりませんでした。(単一のシンボルを変換するために機能するため、シンボルをフレックスコンポーネントに変換するソリューションがいくつかありました)。任意のアイデアをいただければ幸いです。

4

1 に答える 1

1

あるswf(この場合はflex)から別のランタイムロードされたfla.swfにパラメーターを渡すにはいくつかの可能性があります。

1.読み込みクエリパラメータを渡します。

flex.swfのコード:

    public function astest()
    {
        var loader:Loader = new Loader();
        addChild(loader);
        loader.load( new URLRequest("astest1.swf?param1=value1&param2=value2"));
    }

fla.swfからパラメータにアクセスします。

public function astest1()
{
    if(stage)
        onAdded();
    else
        addEventListener(Event.ADDED_TO_STAGE, onAdded);
}

protected function onAdded(event:Event = null):void
{
    //root.loaderInfo.parameters - params of this swf file
    //stage.loaderInfo.parameters - params of core swf file
    var params:Object = root.loaderInfo.parameters;
    for (var param:String in params)
        trace(param,"=",params[param]);
}

出力:

param2 = value2
param1 = value1

この方法の欠如:

-1回の使用で、ロード時にparamsを1回だけ渡すことができます
-2番目のswfはurlによってランタイムロードされる必要があります。たとえば、それ(またはそれを含むクラスの1つ)を埋め込むことはできません。

2.イベントを介した実行時の通信
この方法を使用することをお勧めします。以前の方法が不足しているわけではありません。
ステージをグローバル共通ディスパッチャとして使用する例。

flex.swf:

    public function astest()
    {
        addEventListener("ready", onReady);
        var loader:Loader = new Loader();
        addChild(loader);
        loader.load( new URLRequest("astest1.swf"));
    }

    protected function onReady(event:Event):void
    {
        sendParams("param1=value1&param2=value2");
    }

    protected function sendParams(params:String):void
    {
        stage.dispatchEvent(new DataEvent("params", false, false, params));
    }

fla.swf:

public function astest1()
{
    if(stage)
        onAdded();
    else
        addEventListener(Event.ADDED_TO_STAGE, onAdded);
}

protected function onAdded(event:Event = null):void
{
    stage.addEventListener("params", onParams);
    //fire event with bubbling that anables handling it in the parent swf
    dispatchEvent(new Event("ready", true));
}

protected function onParams(event:DataEvent):void
{
    var data:String = event.data;
    trace(data);
}

出力:

param1=value1&param2=value2

このアプローチでは、必要な数のパラメーターを送信し、オブジェクトパラメーターを渡すカスタムイベントを作成することもできますが、この場合、両方のプロジェクトのソースパスにこのcusomイベントが含まれている必要があります。

于 2013-02-02T12:14:48.863 に答える