Flash 第二次重新加载SWF会出现错误
我在重新加载主权财富基金方面遇到了一个奇怪的问题。 我从加载SWF开始:Flash 第二次重新加载SWF会出现错误,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,我在重新加载主权财富基金方面遇到了一个奇怪的问题。 我从加载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(int
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.
我不明白为什么我会在第二次加载时得到它,而不是第一次。应该是一样的吗?
这是在WindowsProjector.exe文件中完成的,它将作为一个kiosk应用程序运行
编辑:
据我所知,这是一个错误:
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});
我不明白的是为什么它第一次能工作,但是当它被重新加载时就不能工作了
EDIT2:绘图变厚了,我可以通过在堆栈跟踪顶部的函数中使用try/catch块来捕获错误。我跟踪了错误,它是一样的,奇怪的是所有代码都按预期执行。一切正常,并抛出一个错误。。。非常奇怪!我不想在不知道它为什么要这样做的情况下就这样离开…Ben-还有第二行错误吗?它可能会告诉您错误是由“RegionalIntro.swf”抛出的,而不是由包装器swf抛出的
有可能在SWF中发生了与时间相关的事情。换句话说,它可能会使用一些在调用之前需要加载/初始化的资产,有时它还没有准备好。尝试将完整的事件侦听器添加到事件侦听器处理程序中的
loader.contentLoaderInfo
,并执行事件侦听器处理程序中的loader.load
(如addChild(introSWF);
)下面的所有操作。即使不是必需的,它也可以帮助您避免尝试使用尚未加载的对象的情况 你在重新加载SWF时运行完全相同的代码?我运行。它在一个函数中,用于加载介绍,所以我再次调用该函数。本,有几个问题。。。在代码的第5行中,为什么不从var introSWF:Loader=new Loader()
(换句话说,您以前是否初始化过它?)开始呢?此外,您是否尝试过对代码的各个部分进行注释以查看它?您仍然会得到错误?这将帮助您确定是加载(还是卸载)导致了错误。最后,如果您实际上没有发送任何东西,为什么要使用POST方法?它在类的顶部初始化,因为我在几个函数中访问它。建议使用post方法来确保未缓存任何内容。我真的不明白它要做什么,但它没有损坏任何东西,所以我现在就把它放在那里。我不需要它吗?你在哪一行得到空对象引用?我添加了一个编辑。我展示的那个函数只有在加载的SWF表示它已添加到stage之后才被调用。跟踪我要删除的对象,或者我使用的属性显示它们在那里。我可能是以稍微向后的方式这样做的。(这是我拿起一本AS3书后的第一个大项目)我所做的是在doc类中为加载的SWF添加了一个eventlistener,用于added_to_STAGE,它会触发一个init函数,它会发送一个事件,告诉父SWF它已准备好数据,并从STAGE中删除某些内容。这和你用不同的方式说的是一样的吗?也只是试着加上,万一我做错了,我仍然收到错误…你做的基本上是一样的事情(因为加载程序只有在加载内容后才会将加载的内容添加到显示中),但肯定不是最佳做法:)好的,我会以正确的方式进行更新,谢谢。关于我的问题可能是什么,还有什么其他想法吗?我给你的最好建议是使用调试器,在你试图访问哪个对象时,准确地看到它是空的
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});