2011-05-12 51 views
0

我在重新加载SWFS时遇到了一个奇怪的问题。 我开始与我的加载SWF:重新加载SWF第二次出现错误

var req:URLRequest = new URLRequest("RegionalIntro.swf"); 
req.method = URLRequestMethod.POST; 
req.data = true; // POST requests require non-null data 

introSWF = new Loader(); 
introSWF.load(req); 
addChild(introSWF); 

然后,一旦我完成了我卸载:

removeChild(introSWF); 
introSWF.unloadAndStop(true); 

现在,当我想重装我再次运行代码的第一位,我得到的SWF这个错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 

我无法弄清楚为什么我会得到第二次加载,而不是第一次。它应该是一样的? 这是在Windows Projector.exe文件内部完成的,它将作为信息亭应用程序运行。

编辑:

at com.company.THPassport.exRegional::exRegionalIntro/skipTablet() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at com.company.THPassport.exRegional::exRegionalLoader/userLoaded() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at com.company.THPassport.utilities.DB::user/loadUserData() 
at com.company.THPassport.utilities.DB::user/checkExistingUserLoadedXML() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at flash.net::URLLoader/onComplete() 

至于我可以看到它越来越错误从这里:

currentUser = e.data; 

maxspeechB.parent.removeChild(maxspeechB); 
maxspeechA.parent.removeChild(maxspeechA); 
wallstageA.parent.removeChild(wallstageA); 
tabletfalls.parent.removeChild(tabletfalls); 
tabletvanishes.parent.removeChild(tabletvanishes); 

wallfills.alpha = 0; 
    if (currentUser.getCompleteAreas() == 1) { 
     wallfills.gotoAndStop(40); 
    } else if (currentUser.getCompleteAreas() == 2) { 
     wallfills.gotoAndStop(80); 
    } else if (currentUser.getCompleteAreas() == 3) { 
     wallfills.gotoAndStop(120); 
    } 
wallstageB.alpha = 1; 
Tweener.addTween(wallfills,{ alpha:1, time:1, transition: "linear", onComplete:dropSignpost}); 

我不能工作了就是为什么工作的第一次,但是当它重新加载它不起作用?编辑2:剧情变厚,我可以捕捉错误,通过try/catch块包围堆栈跟踪顶部的函数中的所有代码。我跟踪错误和它一样,奇怪的是所有代码都按预期执行。所有工作正常,并引发错误...非常奇怪!我讨厌这样离开它,却没有找到它为什么这样做,但...

+1

重新加载SWF时,您运行完全相同的代码吗? – 2011-05-12 15:34:40

+0

我这样做。它在加载介绍的函数中,所以我再次调用该函数。 – 2011-05-12 15:37:07

+1

Ben,你的代码第5行中有几个问题,你为什么不从'var introSWF:Loader = new Loader()'开始(换句话说,你以前是否已经初始化了它?)另外,你有没有尝试了解代码的各个部分来查看它仍然会出错?这应该有助于确定是否导致错误的加载(或卸载)。最后,如果你实际上没有发送任何东西,你为什么要使用POST方法? – mattstuehler 2011-05-12 15:49:46

回答

0

本 - 是否有第二行到那个错误?它可能会告诉你错误是由“RegionalIntro.swf”引发的,而不是你的包装swf。

这是可能的事情发生在时间相关的SWF中。换句话说 - 它可能会利用一些需要在被调用之前加载/初始化的资产,有时它还没有准备好。

+0

我已经添加了一个编辑。我已经展示过的这个函数只会被调用一次,加载的SWF已经说过它已经被添加到了舞台上。追踪我要移除的对象,或者我使用的属性显示它们在那里。 – 2011-05-12 16:00:27

1

尝试将一个完整的事件侦听器添加到loader.contentLoaderInfo,并在事件侦听器处理程序中执行低于loader.load(如addChild(introSWF);)的所有操作。即使不需要,它也可以帮助您防止您尝试使用尚未加载的对象的情况。

+0

我可能已经做了一个稍微倒退的方式。(这是我拿起AS3书籍以来的第一个大项目)我所做的是在加载的SWF的doc类中,我已经为构造函数添加了一个用于ADDED_TO_STAGE的eventlistener,它触发了一个init函数,它将调度一个事件给告诉父母SWF准备好数据并从舞台上删除某些东西。这与你用不同的方式说过的一样吗? – 2011-05-12 16:09:31

+0

也只是尝试添加,因为我做错了,我仍然收到错误... – 2011-05-12 16:12:59

+1

你基本上是做同样的事情(因为加载器添加加载内容到显示器后才加载),但绝对不最好的做法:) – 2011-05-12 16:16:48

相关问题