【问题标题】:How to properly add "Replay" functionality to a self-preloaded Flash movie?如何为自预加载的 Flash 电影正确添加“重播”功能?
【发布时间】:2013-06-12 15:54:11
【问题描述】:

我在 FlashDevelop 中制作了一个 Flash 项目来制作广告。

通过使用 Additional Compiler 参数设置预加载器:

-frame=NameOfLabel,NameOfMainClass

我的主类在顶部/默认包级别被简单地称为“Main”。

因此,作为 SWF 的预加载器部分的 frame #1 具有:

  • 位图、矢量图形和文本很少(保持在 50kb 以下);
  • 中间有一个 YouTube 视频播放器(不计入文件大小限制);

frame #2 包含其他所有内容(Main 类基本上嵌入了它的所有依赖项)。这包括:

  • 来自预编译 SWF 的资产(位图、符号、字体、XML 数据);
  • 导入的所有类(对于导入其他类的每个类都是递归的);

现在我的大问题是,我的客户在我完成了 99.9% 的项目很久之后才请求“重播”功能。

我将项目或多或少分成不同的状态(简介、就绪、SlideMenu 等),但我不确定如何轻松地将 Flash 电影重置到最开始(它所在的位置)预加载和显示 YouTube 视频)。

简单的解决方案是简单地调用一个可以刷新 Flash 容器的 ExternalInterface JavaScript 方法,但我认为我无法控制 HTML / JavaScript 端发生的事情。

有没有简单的方法从 AS3 调用重放函数?

【问题讨论】:

    标签: actionscript-3 flash ads preloader replay


    【解决方案1】:

    回到第 1 帧不就行了吗?

    【讨论】:

    • 很遗憾,没有,因为 Main 类中的大多数元素都将自己附加到舞台上,因此返回到第一帧仍会将之前的所有实例保留在那里。
    【解决方案2】:

    以下似乎可以解决问题!

    private function onReplayClick(e:MouseEvent):void {
        var theStage:Stage = this.stage; //Temporarly store the stage.
    
        //Kill any animations happening:
        TweenMax.killAll(); //3rd party, may not be applicable for you :P
    
        //Remove ALL containers / child DisplayObjects
        SpriteUtils.recursiveRemove(theStage); //custom-made
        // (this object is no longer attached to the stage at this point)
    
        //Nullify any Singleton / Static variables:
        Main.INST = null;
    
        // Load the 'bytes' of the current SWF in a new Loader, then...
        // add it to the stage
        var swf:Loader = new Loader();
        swf.loadBytes( theStage.loaderInfo.bytes );
        theStage.addChild( swf );
    }
    

    通过对 DisplayObject 和任何静态变量(如 Singleton 实例)进行深度递归清理,它会给您留下一个空白阶段。

    之后,您可以实例化一个新的加载器,该加载器将通过当前 LoaderInfo 的字节属性加载 SWF 本身。

    将加载器添加到舞台,您就可以再次启动并运行!

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2016-01-22
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多