将Flash对象动态导入Flex'层'

时间:2015-03-19 14:21:01

标签: actionscript-3 flash flex actionscript

我有一个Flex项目,可以动态加载SWF文件,并通过MovieClipSWFLoaders将它们放入图层。这完美地工作,对象正确分层。但是,当我加载具有自己的addChild事件的SWF时,它会将子项放在其自己的对象中,因为SWF无法引用它不知道存在的对象。

我需要在创建后移动对象或让Flash识别FlexGlobals.topLevelApplication语法。处理这个问题的最佳方法是什么?

除了动画停止/播放/等等之外,我是否应该在SWF文件中没有任何编码?

我目前正在使用stage.addChild,但我希望选择让它落后于某些图层 我有一个基本的例子 在Flex应用程序中     <s:MovieClipSWFLoader id="bgContainer" width="100%" height="100%"></s:MovieClipSWFLoader>   <s:MovieClipSWFLoader id="obContainer" width="100%" height="100%"></s:MovieClipSWFLoader>   <s:MovieClipSWFLoader id="fgContainer" width="100%" height="100%"></s:MovieClipSWFLoader>
bgContainer.addChild(TheBackground);
fgContainer.addchild(ForegroundItem);
loadedSWF.addObject(); - 我希望这个对象最终出现在obContainer中(在背景前,但在前景后面

现在在Flash SWF中有 var objectInLibrary:objectClass = new objectClass();
function addObject (){ stage.addChild(objectInLibrary); }

加载对象并且函数完美地工作(除了在前台之前),但每当我尝试addChild()进入parentthisroot时或引用FlexGlobals.topLevelApplication它会引发ReferenceError: Error #1069

2 个答案:

答案 0 :(得分:0)

嗯,这个问题比一般不知道FlexGlobals的Flash SWF要深一点。这里有很多解决方法,包括使用getDefinitionByName()

// In your SWF code
var globals:Object = getDefinitionByName("mx.core.FlexGlobals");
trace(globals.topLevelApplication)

但是,你会遇到更多问题。首先,Flex组件(包括顶级应用程序)不允许将任何常规显示对象(即在Flash中创建的任何内容)添加到它们中,它们通常只允许其他Flex类,如UIComponent或{{1} }。

现在,您可以在Flash项目中使用UIMovieClip,以便创建与Flex显示兼容的类。

或者,您只需将显示添加到IVisualElement即可。舞台在Flex之外,因此绕过Flex控制显示器。请记住,只有添加到显示列表的显示对象才能访问舞台。在舞台上添加东西会将它放在整个Flex应用程序之上(它本身就是舞台的一个孩子),所以这可能无法达到你想要的效果。

您还可以使用stageroot向上走SWF父容器。甚至Flex组件也会扩展parent,因此您不必从SWF代码中对Flex类进行编码。

尽管如此,IMO最好的方法是使用事件。在SWF中,您可以通过将现在准备好的SWF显示对象放入Flex组件结构中来调度您在Flex应用程序中处理的自定义事件,Flex在何处以及如何需要它。

希望有所帮助。如果您发布一些代码,我可以给您更多建议。

答案 1 :(得分:0)

我明白了。我可以在调用之前更改对象的depthdepth的{​​{1}}。谢谢你的帮助。