Actionscript 3 Flex和FLash之间的连接

Actionscript 3 Flex和FLash之间的连接,actionscript-3,flash,apache-flex,flash-builder,Actionscript 3,Flash,Apache Flex,Flash Builder,我正在从事一个项目,该项目基于两个主要部分,第一部分由Flex完成,第二部分是flash professional项目,包含PROJECTNAME.fla和PROJECTNAME.as文件。我的问题是如何从flex部件在.fla项目中设置一些参数(例如用户名、用户图像)。我通过以下方式解释主要程序: 通过flex部件连接到服务器并获取用户状态 运行由flash professional项目创建的.swf,如上所述 在.swf文件中设置一些参数 我在谷歌上搜索了很多,但没有找到任何解决方案。(有一

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

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

  • 我在谷歌上搜索了很多,但没有找到任何解决方案。(有一些解决方案将符号转换为flex组件,因为它可以转换单个符号)。任何想法都将受到欢迎。

    有几种可能将参数从一个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
    
    param1=value1&param2=value2
    
    缺乏这种方法:

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

    2.通过事件的运行时通信
    我建议使用这种方法,它并没有缺少以前的方法。
    使用stage作为全局公共调度程序的示例

    flex.swf:

        public function astest()
        {
            var loader:Loader = new Loader();
            addChild(loader);
            loader.load( new URLRequest("astest1.swf?param1=value1&param2=value2"));
        }
    
        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));
        }
    
    佛罗里达州:

    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);
    }
    
    输出:

    param2 = value2
    param1 = value1
    
    param1=value1&param2=value2
    

    通过这种方法,您可以发送所需的任意多个参数,也可以创建自定义事件来传递对象参数,但在这种情况下,两个项目的源路径中都必须有此cusom事件。

    您是说flex“shell”加载flash发布的swf?是的,我的目标就是这样。正如我所说的,对于一个单一的符号是可能的,因为我们可以创建一个.swc文件并在flex项目中简单地使用它,但在我的情况下,我需要一些建议,谢谢。也许你需要使用SWFLoader?+!对于详细的响应,我不禁想知道SWF加载程序是否是该用户所需要的:。是的,SWFLoader是另一种可能性,在我的示例中,它当然可以用来代替加载程序,以便将fla模块添加到flex显示列表中。