我有一个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()
进入parent
,this
,root
时或引用FlexGlobals.topLevelApplication
它会引发ReferenceError: Error #1069
答案 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应用程序之上(它本身就是舞台的一个孩子),所以这可能无法达到你想要的效果。
您还可以使用stage
和root
向上走SWF父容器。甚至Flex组件也会扩展parent
,因此您不必从SWF代码中对Flex类进行编码。
尽管如此,IMO最好的方法是使用事件。在SWF中,您可以通过将现在准备好的SWF显示对象放入Flex组件结构中来调度您在Flex应用程序中处理的自定义事件,Flex在何处以及如何需要它。
希望有所帮助。如果您发布一些代码,我可以给您更多建议。
答案 1 :(得分:0)
我明白了。我可以在调用之前更改对象的depth
和depth
的{{1}}。谢谢你的帮助。