Actionscript 3 Flex和FLash之间的连接
我正在从事一个项目,该项目基于两个主要部分,第一部分由Flex完成,第二部分是flash professional项目,包含PROJECTNAME.fla和PROJECTNAME.as文件。我的问题是如何从flex部件在.fla项目中设置一些参数(例如用户名、用户图像)。我通过以下方式解释主要程序: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组件,因为它可以转换单个符号)。任何想法都将受到欢迎。有几种可能将参数从一个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¶m2=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¶m2=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¶m2=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¶m2=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¶m2=value2
通过这种方法,您可以发送所需的任意多个参数,也可以创建自定义事件来传递对象参数,但在这种情况下,两个项目的源路径中都必须有此cusom事件。您是说flex“shell”加载flash发布的swf?是的,我的目标就是这样。正如我所说的,对于一个单一的符号是可能的,因为我们可以创建一个.swc文件并在flex项目中简单地使用它,但在我的情况下,我需要一些建议,谢谢。也许你需要使用SWFLoader?+!对于详细的响应,我不禁想知道SWF加载程序是否是该用户所需要的:。是的,SWFLoader是另一种可能性,在我的示例中,它当然可以用来代替加载程序,以便将fla模块添加到flex显示列表中。