Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3加载器不断重复加载相同的swf_Actionscript 3_Flash_Loader_Timeline_Loaded - Fatal编程技术网

Actionscript 3 AS3加载器不断重复加载相同的swf

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");

我在SWF的主时间轴上制作了一个flash动画,包括两个层、一些函数和一些关键帧标签。例如,我有一个星星的movieclip出现在屏幕上,然后触发一个调度事件,让主时间线转到帧标签“next”

以下是主时间线上使用的actionscript示例:

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都能正常工作,但当它不能正常工作时,它有时会变得非常令人费解。谢谢你的勾选。感谢。:)