【发布时间】:2012-07-13 21:45:52
【问题描述】:
我有一个完整的浏览器窗口 AS3 Flash CS4 父 swf,它加载第三方子 swf,高度/宽度更小并且位置适当(即居中)。无论我尝试使用哪种加载技术,我都会在子 swf 中遇到放置和方向问题,这会破坏子进程。
在一个示例中,孩子将加载一个辅助显示对象(可能是一个影片剪辑),但会尝试将其附加到舞台上。如果我允许它在加载期间通过 SecurityDomain 访问舞台,它会将其定位在父 swf 的 0,0 而不是子 swf 的 0,0(已经适当地定位/居中)。
在另一种情况下,加载期间的子级定位是合适的,但是在子级内部放置似乎参考舞台的 X、Y 位置会被子级 swf 居中的量所抵消(即,如果子级的加载器swf 居中,使其 X 位于 200,而子 swf 内部的一个对象应该位于 100,50,它实际上位于 300,50)。
常见的线程似乎是子 swfs,无论是否允许访问舞台,都使用父级的舞台或播放器属性,而不是加载器中它们自己的属性。
如何隔离子 swf,使其仅使用其自己的子环境而不是父级的子环境进行定位和定向?
我尝试过内置的 Loader 和 UILoader、Greensock 的 SWFLoader、Flex 的 SWFLoader,甚至通过 TextField 中的文本加载它。
似乎 AIR 的 HTMLLoader 可以工作(因为 HTMLLoader 中的 SWF 对象显然使用它们自己的舞台对象),但是这个应用程序已经在浏览器中可用。
理想情况下,我仍然希望能够与孩子交流,但此时确保孩子成功运行更为重要。
这似乎是一种常见的方法,但遇到左右阻塞问题让我觉得我以错误的方式处理这个问题。
我最后的办法是用 JS 框架替换父 swf,但前提是绝对必要。
我们将不胜感激在此过程的任何部分提出解决方案的建议。
【问题讨论】:
-
这是我关于 SE 的第一个问题,请原谅任何未能遵循 SE 协议的问题。
-
你试过lockroot吗?
-
@The_asMan,lockroot 在 AS3 中不可用。不过谢谢你的想法。
-
是的,我的错。您需要重新开发子 swf 以不针对阶段。任何时候你的目标阶段,你都失去了移植 swf 的能力,或者当你发现过多或范围界定会出现在你身上时。我会在子 swf 中添加一个容器,而不是舞台,它将为您保存所有内容。如果您需要孩子访问父项中的某些内容或加载 swf,那么您可以使用 parent.parent 方法进行跟踪。
-
也看看root。加载的 swf 中的“根”似乎是指该 swf 的根。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
标签: actionscript-3 flash