【问题标题】:AS3: How do I use frame scripts on loaded swf animations?AS3:如何在加载的 swf 动画上使用帧脚本?
【发布时间】:2010-10-05 15:48:01
【问题描述】:

我正在尝试在已加载的 SWF 动画上使用 addFrameScript(),但遇到了一些问题。以下是目前有效的方法:

public function project() {
    var loader:Loader = new Loader();
    loader.load(new URLRequest("animation.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, animLoadComplete, false, 0, true);
}

private function animLoadComplete(e:Event):void {
    anim = e.target.content as MovieClip;
    addChild(anim);
    //anim.addFrameScript(anim.totalFrames - 1, animEnd);
}

private function animEnd():void {
    trace("animEnd");
}

像这样,动画播放 fin 并且一遍又一遍地循环。

问题似乎在于无论使用stop()play() 或任何动画功能,动画都会运行。 trace(anim.totalFrames) 还显示我的动画是 2 帧而不是 23 帧(它是)。

当我取消注释 anim.addFrameScript(anim.totalFrames - 1, animEnd); 时,似乎每帧都会调用帧脚本,并且动画停止播放,取而代之的是它应该出现的 flash“加载点”。

我想我的问题是双重的。我的动画加载是否正确?为什么框架脚本会导致我的动画消失?

【问题讨论】:

    标签: actionscript-3 animation flash loader


    【解决方案1】:

    使用这些东西时,该 stop() 的路径/引用可能会很棘手。

    我构建了一些实用程序来简化它,因为我经常这样做 - 实用程序也处理保留现有代码:http://flair-flash-flex-air.blogspot.com/2010/07/using-actionscript-3-to-inject-code.html

    有一个链接指向我在文章中创建的实用程序类的要点。

    但是,您加载的 swf 跟踪为具有 2 帧而不是您期望的 23 帧这一事实 - 正如您所注意到的 - 令人担忧!我预计这会导致您出现明显的问题(跟踪“每一帧”的代码),就好像您只有 2 帧,那么您的脚本将在备用帧上运行。

    您是否尝试过听 INIT 而不是 COMPLETE?如果我想使用 swf 的内容,我通常会发现这更可靠。此外,您可能(取决于您的父 swf)需要设置 LoaderContext 属性的 SecurityDomain (当您执行 load() 时,您将传递这个 - 查看加载器的 AS3 文档以获取更多详细信息)。

    【讨论】:

      【解决方案2】:
      var oldFrameActions:Function = function():void {};
      
      if((mc['frame23'] != null) && (mc['frame23'] is Function))
      {
      oldFrameActions = mc['frame23'];
      }
      
      var newFrameActionsFrame23:Function = function():void {
      oldFrameActions();
      // add new code here...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        相关资源
        最近更新 更多