Actionscript 3 AS3加载器不断重复加载相同的swf
我在SWF的主时间轴上制作了一个flash动画,包括两个层、一些函数和一些关键帧标签。例如,我有一个星星的movieclip出现在屏幕上,然后触发一个调度事件,让主时间线转到帧标签“next” 以下是主时间线上使用的actionscript示例:Actionscript 3 AS3加载器不断重复加载相同的swf,actionscript-3,flash,loader,timeline,loaded,Actionscript 3,Flash,Loader,Timeline,Loaded,我在SWF的主时间轴上制作了一个flash动画,包括两个层、一些函数和一些关键帧标签。例如,我有一个星星的movieclip出现在屏幕上,然后触发一个调度事件,让主时间线转到帧标签“next” 以下是主时间线上使用的actionscript示例: Stars.addEventListener("fadeInTitle",_fadeInTitle); function _fadeInTitle(e:Event):void { Title.gotoAndPlay("fadeIn");
Stars.addEventListener("fadeInTitle",_fadeInTitle);
function _fadeInTitle(e:Event):void {
Title.gotoAndPlay("fadeIn");
Stars.removeEventListener("fadeInTitle",_fadeInTitle);
}
stop();
只有主权财富基金才能完美运作。当我尝试将此SWF加载到另一个SWF时,问题就出现了。
所发生的情况是加载程序不断地重复加载SWF,重叠它们,并且忽略加载SWF主时间线上的actionscript,时间线连续播放。下面是我用来加载SWF的代码:
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
function startLoad(){
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("Fly.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);
}
function onCompleteHandler(loadEvent:Event){
addChild(loadEvent.target.content);
}
function onProgressHandler(mProgress:ProgressEvent){
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
}
startLoad();
那里没有什么特别的。只是一个简单的加载器
我找到了一个解决办法,将整个动画放在一个主movieclip中,并将该movieclip放在主时间轴上(一个关键帧,一个层,没有动作脚本),然后加载它。这样做很好,但感觉更像是一个补丁,而不是一个解决方案。我真的很想知道,当你尝试加载一个使用多个层、关键帧和动作脚本的主时间线的外部SWF时,为什么会出现bug
任何帮助/提示都将不胜感激。非常感谢你的阅读
m首先从函数中取出装入器实例化,这是不必要的。其次,在onComplete函数中杀死侦听器。第三,如果此加载程序代码位于加载程序外壳的时间轴上,请确保没有多个帧,或者如果有(不确定为什么会有)在包含加载程序代码的帧上放置一个停止点。或者更好的方法是,使用文档类来包含加载程序代码,而不是将其放在时间线上。我最好的猜测是你不知何故又重新调用了startoad()。此外,请确保已安装flash调试播放器,以便在浏览器中查看时获得正确的错误报告
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("Fly.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);
function onCompleteHandler(loadEvent:Event)
{
mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler);
addChild(loadEvent.target.content);
}
function onProgressHandler(mProgress:ProgressEvent)
{
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
}
您是否尝试在startLoad()中设置断点以确保只调用一次?谢谢您的回答,您的观点是正确的,我修改了加载程序,但这不是问题所在。我意外地找到了解决办法。我想对加载的fla文件进行一些测试,所以我只是用另一个名称保存它,重新导出swf并在我的加载程序中调用新的swf。对代码或任何东西都没有任何更改,而且运行良好。我怀疑旧的fla文件有某种损坏,或者是一些随机内存错误。这很奇怪,但并不奇怪。大多数情况下,Flash都能正常工作,但当它不能正常工作时,它有时会变得非常令人费解。谢谢你的勾选。感谢。:)