【问题标题】:How to loop SWF file loaded with Loader?如何循环使用 Loader 加载的 SWF 文件?
【发布时间】:2014-06-24 19:13:31
【问题描述】:

我想循环一个已通过 AS3 中的 Loader 类加载的 swf 文件。 我的代码如下所示:

public class MyLoader extends MovieClip {
    public function MyLoader() {
        var myLoader:Loader = new Loader();
        var url:URLRequest = new URLRequest("external-movie.swf");
        myLoader.load(url);
        myLoader.contentLoaderInfo.addEventListener("complete", function() {
      });
      addChild(myLoader);
    }
}

据我了解,加载程序在嵌入电影完成时没有事件?有没有办法解决这个问题?它不能是 AS3 实现。我只想让从 Indesign 导出的电影循环播放。提前致谢

【问题讨论】:

  • 提示:您应该在加载之前添加完整的侦听器。

标签: actionscript-3 flash


【解决方案1】:

特别是当您没有多少编程经验时,您应该避免使用肮脏的快捷方式,因为它们只会给您带来很多麻烦。所以避免使用匿名函数,避免使用字符串代替静态事件变量。 话虽如此,如果您加载的电影有自己的时间线,那么它将被转换为 MovieClip。此外,该电影不是嵌入而是加载的,这是一个很大的不同。

保留该电影和加载器的引用:

private var theLoadedMovie:MovieClip;
private var myLoader:Loader;

监听 INIT 事件而不是 COMPLETE 事件(具有时间轴的电影在其第一帧加载“INIT”时开始播放,COMPLETE 事件在整个电影加载时触发)。

myLoader = new Loader();
var url:URLRequest = new URLRequest("external-movie.swf");
myLoader.load(url);
myLoader.contentLoaderInfo.addEventListener(Event.INIT, handleInit);

在您的 handleInit 方法中保留该电影的引用:

theLoadedMovie = myLoader.content as MovieClip;
addChild(theLoadedMovie);
theLoadedMovie.addEventListener(Event.ENTERFRAME, handleEnterFrame);

在您的 handleEnterFrame 方法中检查电影进度以了解它何时结束:

if(theLoadedMovie.currentFrame == theLoadedMovie.totalFrames)
{
     //movie has reached then end
}

【讨论】:

  • 您应该在使用load() 之前添加您的加载程序侦听器。在某些情况下,它可能会在执行完当前线程之前从负载中返回。
  • 我同意这是最好的方法 (+1),它也可以用 'addFrameScript` 以更少的代码行来完成 - 但addFrameScript 没有记录,最好不要依赖。
  • 复制和粘贴时会发生这种情况。加载应该在课程结束时发生。
  • addFrameScript 更好,但正如您所说的那样没有文档,初学者更难使用。
  • 感谢您的回复。我实际上来自解释匿名函数调用的 java 和 javascript 背景;)事实证明,swf 文件没有自己的时间线,对 totalFrames 的调用导致 2。我认为这是因为该文件已在 Indesign 中创建。无论如何我都会接受你的回答。
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多