`
sooxin
  • 浏览: 257655 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

加载多个SWF文件的解决方案

阅读更多
[i=s] 本帖最后由 ohuangkeo 于 2009-9-28 13:06 编辑 [/i]

起源:
在一个中大型的项目中,不可能把所有内容都做到一个FLASH中来制作,原因很简单,太大.
所以很多时候会有N多个FLASH小文件,然后一个主要FLASH来加载调用.这样的好处显而易见的.

问题:
1.简单的使用Loader直接加载SWF,显然会加大服务器的压力.(比如网络游戏,请求量比较大)
2.使用[Embed]可以解决此问题,但还是有个问题.就是Embed只能加载Class或String,不能是MovieClip.
  所以这样加载来的Class实例化后不能控制MC里的元件或是Public方法.

解决方案:
还是使用Embed,使用loadBytes的方法加载实例化的对象二进制数据,以二进制数据实例化一个MC对象.
这样就可以对此MC里的元件或Public方法直接调用了.

备注:
[附例子] 下面贴出主要源代码
也许有更好的解决问题的方法,请大家拍砖
package 
{
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.utils.ByteArray;
        
        /**
         * @author oHuangKeo 2009-09-28 12:05
         */
        public class B extends MovieClip
        {
                // 预加载SWF数量
                private var allClassNum:uint = 2;
                // SWF A文件
                [Embed(source = "A.swf")] private var AClass:Class;
                // SWF B文件
                [Embed(source = "AA.swf")] private var AAClass:Class;
                
                // 申请加载数组
                // 定义为数组是因为可能要加载的SWF数据可能会N多个,要是一个一个写,代码量会比较大
                // 所以定义为数组直接操作数组比较好
                private var LoadMovieClip:* = {
                        "A": { Class:AClass, MC:new MovieClip() },
                        "AA": { Class:AAClass, MC:new MovieClip() }
                        /*
                        ...
                        这里可能还有更多的加载SWF
                         */
                }
                
                /**
                 * 大家都知道这个是干啥的
                 */
                public function B()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                
                /**
                 * 初始化
                 * 处理预加载SWF数组
                 * @param        e
                 */
                private function init(e:Event=null):void
                {
                        for each(var i:* in LoadMovieClip)
                        {
                                var loader:Loader = new Loader();
                                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
                                loader.loadBytes((new i.Class()).movieClipData);
                        }
                }
                /**
                 * 某个数据加载完成事件
                 * @param        e
                 */
                private function loadComplete(e:Event):void
                {
                        var content:MovieClip = e.currentTarget.content;
                        
                        // 分析是哪个Class
                        // 这个方法可能有点笨,但目前我还不知道如果得到类名
                        // 需要得到类名为 A, 而不是[class A]
                        var className:String = content.constructor.toString();
                        var parseName = /\[class (.+)\]/.exec(className);
                        
                        // 保存MovieClip对象
                        LoadMovieClip[parseName[1]].MC = content;
                        
                        // 如果需要要加载的SWF都加载完成,就开始其它事了
                        if (--allClassNum == 0) start();
                }
                
                private function start():void
                {
                        // 添加A文件到舞台
                        addChild(LoadMovieClip["A"].MC);
                        // 调用A文件的afun方法
                        LoadMovieClip["A"].MC.afun();
                        // 添加AA文件到舞台
                        addChild(LoadMovieClip["AA"].MC);
                }
        }
        
}
分享到:
评论

相关推荐

    android加载.swf文件

    在Android平台上加载.SWF(ShockWave Flash)文件是一项技术性的挑战,因为Adobe Flash Player自Android 4.1版本后就不再被官方支持。然而,这并不意味着无法在Android应用中展示SWF内容。本篇文章将深入探讨如何在...

    绝对能实现多个SWF连续播放的播放器

    描述部分提到,发布者发现现有的播放器无法满足这一需求,因此他们提供了一个解决方案——一个能够连续播放多个SWF文件的播放器。这表明该播放器具有特定的功能,能够读取和顺序执行一系列SWF文件,为用户提供连续的...

    网页flash-swf文件下载(办)方法

    本文将深入探讨多种下载网页Flash-SWF文件的方法,确保读者能够根据自身需求选择最适合的解决方案。 #### 一、利用插件工具下载Flash-SWF文件 ##### **Sothink SWF Catcher** Sothink SWF Catcher是一款专为捕获...

    flex jsp 嵌套 swf html

    总的来说,将Flex嵌入JSP并生成SWF作为系统拓扑图,是一种高效且灵活的解决方案,它充分利用了各种技术的优势,为用户提供丰富的视觉体验和便捷的操作交互。在处理复杂的网络架构和监控需求时,这种技术尤为适用。

    swf文件,用于cocos2dx的Falsh 控件播放

    "041-"这个文件名称可能是指一个具体的SWF资源,可能包含一个或多个动画序列。在实际项目中,你可能需要根据文件名的完整格式来解析和加载正确的资源。通常,SWF文件会包含动画帧、动作脚本和其他与时间相关的数据,...

    swf2exe文件格式转换器

    1. **加载SWF文件**:用户首先需要选择要转换的SWF文件,这是原始的Flash内容载体。 2. **设置参数**:可能包含输出路径、图标自定义、是否嵌入Flash Player等选项,以满足不同需求。 3. **转换过程**:软件解析SWF...

    FusionCharts的Javascript和SWF文件

    下面我们将深入探讨这些组件以及如何利用它们构建高效的可视化解决方案。 **1. FusionCharts简介** FusionCharts是一款基于Web的图表库,它能够将结构化的数据转换为丰富多彩、交互式的图表。这款工具广泛应用于...

    把PDF文件转换为swf

    总的来说,从PDF到SWF的转换涉及到多个技术层面,包括文件解析、内容转换、交互实现、编码压缩和字体处理等。这不仅需要对PDF和SWF格式有深入理解,还可能需要一定的编程技能,以便使用或开发转换工具。对于那些希望...

    从URL里获取文件路径,显示swf文档

    3. **使用第三方库**:例如,FlexPaper是一个开源的数字出版解决方案,它支持SWF文件的在线预览。MyFlexPaper可能是这个库的一个实例或定制版本。使用FlexPaper,你需要将其JavaScript和CSS文件引入你的项目,然后...

    我想玩的swf我想玩的swf

    SWF文件格式详解 ...总之,虽然SWF文件曾是互联网上的重要组成部分,但随着技术的发展,它已被更现代、更安全的解决方案所取代。对于那些仍然需要处理SWF内容的人来说,理解其工作原理和相关工具至关重要。

    ZzFlash.Swf版播放器

    总之,ZzFlash.Swf版播放器为用户提供了独立且全面的SWF文件播放解决方案,让用户可以无阻碍地享受丰富的Flash内容,无论是在网络上还是本地存储的SWF文件。随着Adobe Flash逐渐被淘汰,这样的独立播放器对于仍然...

    利用socket传SWF到Flash

    RAR是一种常见的压缩格式,可以用来归档多个文件。在这个场景下,它可能包含了Java端处理SWF文件和Socket通信的代码,或者Flash端用到的额外ActionScript类库。 总的来说,这个技术方案通过Java与Flash间的socket...

    在线阅读解决方案(含关键代码)--莲花

    在线阅读解决方案,主要针对的是如何在网页环境中提供类似百度文库的阅读体验,让用户能够方便地查看PDF、Word、PPT等文档。本方案的核心是将这些格式的文档转换为SWF(Shockwave Flash)文件,然后利用FlexPaper...

    swfJSPreloader

    为了确保广泛兼容,开发者应同时考虑使用HTML5的`<link rel="preload">`等原生预加载特性,或者寻找无Flash的预加载解决方案。 5. **注意事项**: - 预加载虽然可以改善用户体验,但也需要谨慎使用,因为它会占用...

    MP3 to SWF Converter V2.4

    在“使用说明.txt”文件中,用户可以找到关于如何操作MP3 to SWF Converter V2.4的详细步骤,包括安装指南、界面介绍、转换参数设置以及可能出现的问题解决方案。而“无忧转换网.url”则可能是指向一个在线转换服务...

    exe转SWF工具

    总之,exe转SWF工具提供了一种将桌面应用程序转化为在线可访问内容的方式,涉及到二进制文件解析、格式转换、动画编译等多个领域的技术。正确理解和使用这类工具,可以帮助用户更广泛地分享和展示他们的作品。

    swf网页播放代码

    描述中的“极酷SWF、FLV等网页播放器”意味着这个压缩包可能包含一个或多个播放器程序,这些程序能够支持SWF和FLV格式的视频文件。FLV(Flash Video)是Adobe Flash平台上的流媒体视频格式,适合在网络上传输。这种...

    如何下载FusionMap中国各省地图的SWF文件

    在IT行业中,FusionMap是一款强大的数据可视化工具,特别适合用于展示中国各省份的数据分布情况。...在合法的前提下,这种技巧可以作为临时解决方案,帮助用户在项目中快速集成和测试FusionMap的中国地图功能。

    Flex控制外部引用SWF的播放进度源码

    为了能够调用这些方法,外部SWF必须在ActionScript中导出它们,并且在加载时确保两个SWF之间的安全策略允许通信。在AS3中,可以使用`ExternalInterface`类来实现SWF之间的JavaScript和ActionScript通信。 当然,...

    swf2gif.rar(swf转换gif)

    "swf2gif.rar" 提供了一种方便的解决方案,允许用户将SWF文件转换为GIF格式,这在优化网站、处理动画或确保跨平台兼容性时非常有用。 首先,让我们深入了解SWF格式。SWF全称为Small Web Format,它由Adobe Flash...

Global site tag (gtag.js) - Google Analytics