【发布时间】:2012-05-04 17:43:24
【问题描述】:
我在重新加载 child.swf 时遇到问题。在第一次加载(loadPattern())时它工作正常,但在第二次卸载和加载时它工作不正确(不加载照片内容)没有任何错误。
Child.swf 建立在 as2 之上。
main.swf 建立在 as3 之上。
var childSwf:Object;
var loader:Loader = new Loader();
var childLoaded:Boolean = false;
function loadPatternHandler(event:Event):void
{
childSwf = event.target.content;
childSwf.x = 0;
childSwf.y = -35;
}
function loadPattern():void
{
stopPattern();
var myswf:String = "child.swf";
var Xpos:Number = 0;
var Ypos:Number = 0;
var req:URLRequest = new URLRequest(myswf);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadPatternHandler);
//loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.load(req);
loader.x=Xpos;
loader.y=Ypos;
addChild(loader);
childLoaded=true;
}
function stopPattern():void
{
if(childLoaded)
{
loader.unloadAndStop();
//loader.unload();
removeChild(loader);
loader=null;
loader = new Loader();
childLoaded = false;
}
}
loadPattern();
在 stopPattern() 上没有完全卸载吗?
有什么建议吗?
谢谢。
【问题讨论】:
-
一旦加载,您应该将所有逻辑添加到处理程序中 - loadPatternHandler 函数。您在 loadPattern 中立即调用 stopPattern 将再次删除它。
-
stopPattern 在加载下一个 child2.swf 之前删除上一个 child1.swf,或者为了重新加载,我只调用 loadPattern()。也许重新加载后,child.swf 更改工作目录并且无法加载 config.xml 文件。我不知道如何追踪。
-
我已经有一段时间没有使用
loader了,所以这可能有点离谱。你需要addChild(loader)吗?我认为该对象已加载到处理程序中(event.target.content是对loader.content之类的引用),因此这是不必要的。此外,您永远不会删除childSwf中保存的引用,因此至少会留下一个引用。childSwf = null可能会有所帮助。此外,我认为您实际上并未将内容放入 display list 。 . .也许试试addChild(childSwf)和removeChild(childSwf)。 -
我在 stopPattern() 中尝试了 childSwf = null,没有任何变化。 addChild(childSwf) for child1.swf(built on as3) 工作正常,但对于 child.swf(built on as2) 它给出错误:错误 #2180:将 AVM1 内容(AS1 或 AS2)移动到不同部分是非法的加载到 AVM2 (AS3) 内容中时的 displayList。
标签: actionscript-3 flash adobe actionscript-2 flash-cs5