0

我正在做一个项目,它基于两个主要部分,第一部分由 Flex 完成,第二部分是一个 flash 专业项目,包含 PROJECTNAME.fla 和 PROJECTNAME.as 文件。我的问题是我们如何从 flex 部分设置 .fla 项目中的一些参数(例如用户名、用户图像)。我通过以下方式解释主要程序;

  1. 通过 flex 部分连接到服务器并获取用户的状态
  2. 运行如上所述由 flash 专业项目创建的 .swf
  3. 在 .swf 文件中设置一些参数。

我google了很多,我没有找到任何解决方案。(有一些将符号转换为弹性组件的解决方案,因为它适用于转换单个符号)。任何想法将不胜感激。

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

缺乏这种方法:

- 一次使用,加载时只能传递一次参数
- 第二个 swf 必须在运行时通过 url 加载,例如,不能嵌入它(或包含它的类之一)。

2.通过事件的运行时通信
我推荐使用这种方法,它不缺乏前一种。
使用 stage 作为全局公共调度程序的示例。

弹性.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

使用这种方法,您可以根据需要发送尽可能多的参数,您还可以创建自定义事件来传递对象参数,但在这种情况下,两个项目都必须在源路径中具有此自定义事件。

于 2013-02-02T12:14:48.863 回答