我有一个问题,发挥一个外部主权财富基金内的主要主权财富基金。所有的东西都装得很好,除了没有提示。我使用一个简单的延迟actionscript来暂停主时间线,直到外部SWFs加载,但在浏览器中测试时,它并不总是同步。
是否有AS3代码可以用来暂停主时间线,直到外部SWF完成加载和播放?我需要在电影里做很多次,顺便说一遍.
下面是我使用的延迟和loadmovie数组。
<--------------//Timer//--------------->
var timer4:Timer = new Timer(1500, 1);
timer4.addEventListener(
TimerEvent.TIMER,
function(evt:TimerEvent):void {
play();
}
);
timer4.start();
<--------------//loadMovie//--------------->
function startLoad()
{
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest('flip/note_flip.swf');
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);
}
function onCompleteHandler(loadEvent:Event)
{
addChild(loadEvent.currentTarget.content);
}
function onProgressHandler(mProgress:ProgressEvent)
{
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
trace(percent);
}
startLoad();发布于 2013-08-14 05:09:08
加载器对象的load()方法是异步的。这意味着流程将继续执行下一行代码,加载将独立完成。这就是为什么你可以看到它不是在暗示。
解决问题的简单方法是,一旦加载了所有电影,就将所有加载的电影stop()在Event.COMPLETE上,并将它们放到play()上。
使用数组存储加载的电影,并在加载所有电影后对它们进行寻址。
是的,计时器攻击是没有意义的,你不会知道加载文件需要多长时间,每次都会有所不同。
编辑:
假设您有N个电影.swf文件,它们构成了一个完整的场景。你想要加载他们所有的,一旦他们都加载-播放他们。
让我们构建一个简单的逐步逻辑:
1)首先,我们需要指向外部主权财富基金所在位置的URL列表。
2)然后开始逐个(而不是全部)加载SWF,以防止Flash错误不加载某些内容,并保持电影剪辑的顺序,即z-索引、深度、层序等。
( 3)在每部加载的电影中,我们数一数还有多少还需要加载。
4)一旦所有的电影都被加载,我们就会play()所有这些电影。
下面是您的代码(编写在一个框架中,以防您不使用类,也不熟悉OOP):
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.MovieClip;
var linkArray:Array = ["1.swf", "2.swf", "3.swf"];
var loadedMovieArray:Array = [];
var totalMovies:int = linkArray.length;
var loadedMovies:int = 0;
var urlRequest:URLRequest = new URLRequest();
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieLoaded);
loadMovies();
function loadMovies():void
{
var movieIndex:int = loadedMovies;
var movieURL:String = linkArray[movieIndex];
urlRequest.url = movieURL;
l.load(urlRequest);
}
function onMovieLoaded(e:Event):void
{
var loadedMC:MovieClip = l.content as MovieClip;
loadedMC.stop();
loadedMovieArray.push( loadedMC );
loadedMovies++;
if (loadedMovies == totalMovies)
onAllMoviesLoaded();
else
loadMovies();
}
function onAllMoviesLoaded():void
{
for (var i:int = 0; i < loadedMovieArray.length; i++) {
var mc:MovieClip = loadedMovieArray[i];
addChild(mc);
mc.play();
}
}https://stackoverflow.com/questions/18223508
复制相似问题