首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部swf加载和播放时的AS3主存延迟脚本

外部swf加载和播放时的AS3主存延迟脚本
EN

Stack Overflow用户
提问于 2013-08-14 04:56:34
回答 1查看 1.3K关注 0票数 0

我有一个问题,发挥一个外部主权财富基金内的主要主权财富基金。所有的东西都装得很好,除了没有提示。我使用一个简单的延迟actionscript来暂停主时间线,直到外部SWFs加载,但在浏览器中测试时,它并不总是同步。

是否有AS3代码可以用来暂停主时间线,直到外部SWF完成加载和播放?我需要在电影里做很多次,顺便说一遍.

下面是我使用的延迟和loadmovie数组。

代码语言:javascript
复制
<--------------//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();
EN

回答 1

Stack Overflow用户

发布于 2013-08-14 05:09:08

加载器对象的load()方法是异步的。这意味着流程将继续执行下一行代码,加载将独立完成。这就是为什么你可以看到它不是在暗示。

解决问题的简单方法是,一旦加载了所有电影,就将所有加载的电影stop()Event.COMPLETE上,并将它们放到play()上。

使用数组存储加载的电影,并在加载所有电影后对它们进行寻址。

是的,计时器攻击是没有意义的,你不会知道加载文件需要多长时间,每次都会有所不同。

编辑:

假设您有N个电影.swf文件,它们构成了一个完整的场景。你想要加载他们所有的,一旦他们都加载-播放他们。

让我们构建一个简单的逐步逻辑:

1)首先,我们需要指向外部主权财富基金所在位置的URL列表。

2)然后开始逐个(而不是全部)加载SWF,以防止Flash错误不加载某些内容,并保持电影剪辑的顺序,即z-索引、深度、层序等。

( 3)在每部加载的电影中,我们数一数还有多少还需要加载。

4)一旦所有的电影都被加载,我们就会play()所有这些电影。

下面是您的代码(编写在一个框架中,以防您不使用类,也不熟悉OOP):

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18223508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档