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

Importing Flash object dynamically into Flex 'layers'

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

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

除了动画之外,SWF 文件中是否应该没有任何编码 stop/play/etc?

我目前正在使用 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

好吧,这个问题比不了解 FlexGlobals 的典型 Flash SWF 要深一些。那里有许多解决方法,包括使用 getDefinitionByName():

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

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

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

或者,您可以将显示器添加到 stage。舞台在 Flex 之外,因此绕过 Flex 对显示器的控制。请记住,只有添加到显示列表的显示对象才能访问舞台。向舞台添加内容会将其置于整个 Flex 应用程序之上(它本身本质上是舞台的子级),因此这可能无法满足您的要求。

您还可以使用 rootparent 遍历 SWF 父容器。甚至 Flex 组件也会扩展 DisplayObjectContainer,因此您不必从 SWF 代码中针对 Flex 类 进行编码。

话虽如此,IMO 最好的方法是使用事件。在您的 SWF 中,您可以通过将现在就绪的 SWF 显示对象放入 Flex 组件结构中 Flex 需要的位置和方式来分派您在 Flex 应用程序中处理的自定义事件。

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

我明白了。我可以在调用对象之前更改对象的 depthMovieClipSWFLoaderdepth。谢谢你的帮助。