`

actionscript project 中的预加载

    博客分类:
  • Flex
阅读更多

actionscript project 中的预加载

 

现在又很多的sns、web game都是用 flash来做的,其中有的是用Flas CS开发完成的,又的使用Flex porject完成的也有是用 Actionscript project完成的。Flex peoject的Preloader他是给你做好的,你只要做一下相关的设置或继承就可以了。那么怎么用actionscript project中实现preloader呢。

 

flash早期的设计的目的就是想让flash边下载边播放,所以都把资源都编译到相应的帧当中去了,flex project application中一般有两帧:一帧是PreLoader,一帧是Application。这样我们在第一帧中放置一些简单的加载动画来减缓对第二帧的加载的等待。actionscript project中只有一帧,所以loader要单独做swf来load你的application,但是样对于一个web game或以个sns app的逻辑上和代码管理上并不是很好,所以我们要早到在actionscript project实现编译出两帧的办法来。

 

那就是

frames.frame label class name [...]
generate-frame-loader=true|false

[Frame(factoryClass="mx.managers.SystemManager")]
 

flex sdk中对此的相关的相关介绍很少或者就没有,也只能到网上去看看有没有比较权威的人士对他做出的解释。

 

今天看到一个比较老的文章,就是将这个的http://www.bit-101.com/blog /?p=946    介绍的很全面很细致,但是结果试下来却没有成功。

 

按照上面的方法,我声明了主application(MyApplication) [Frame(factoryClass="SystemManager",label="hello")]

 

然后在SystemManager中实现了Preloader和对MyApplication的初始化。

 

但是在

/**这里不能直接写成:
                var app:Application = new Application();
                这样的由于引用到 Application,Application中所有的资源都会被编译到第一帧来
                这样的话 PreLoader就没有意义了,你也看不到PreLoader,就跳到第二帧了
**/

            var appCls:Class = getDefinitionByName("MyApplication") as Class;
            var app:DisplayObject = new appCls() as DisplayObject;
            addChild(app);
 

 

这里还是报错,看了下flash的大小,看来MyApplication是没有编译到flash的第二帧。

 

于是我在编译参数里面,设置了

-frames.frame MyApplication MyApplication 

 就可以了,MyApplication是被编译到了第二帧,这样第一帧只有很少的代码量和资源引用,这样flash就可以很快的将一帧加载完并显示 loading状态。

 

*这里唯一要注意的地方就是,在第一帧中 不要将一些不要的资源引用进来,这样会增大第一帧的体积。

 

 

类文件:

package {
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.utils.getDefinitionByName;
    
    public class SystemManager extends MovieClip {
        private var preLoader:PreLoader;
        public function SystemManager() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            stop();
            
            preLoader = new PreLoader();
            addChild(preLoader);
            
            preLoader.x = stage.stageWidth/2 - preLoader.width/2;
            preLoader.x = stage.stageHeight/2 - preLoader.height/2;
            
            loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandle);
            loaderInfo.addEventListener(Event.COMPLETE,completeHandler);
        }
        
        private function progressHandle(e:ProgressEvent):void {
            preLoader.setProgress(e.bytesLoaded,e.bytesTotal);
        }
        
        private function completeHandler(e:Event):void {
            loaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressHandle);
            loaderInfo.removeEventListener(Event.COMPLETE,completeHandler);
            
            this.removeChild(preLoader);
            preLoader = null;
            
            nextFrame();
            
            initApplication();
        }
        
        private function initApplication():void {
            /**这里不能直接写成:
                var app:Application = new Application();
                这样的由于引用到 Application,Application中所有的资源都会被编译到第一帧来
                这样的话 PreLoader就没有意义了,你也看不到PreLoader,就跳到第二帧了
            **/
            var appCls:Class = getDefinitionByName("MyApplication") as Class;
            var app:DisplayObject = new appCls() as DisplayObject;
            addChild(app);
        }
    }
}
 

 

 

package {
    import flash.display.Sprite;
    import mx.core.BitmapAsset;
    
    [Frame(factoryClass="SystemManager",label="hello")]

    public class MyApplication extends Sprite {
    
        [Embed(source="tets.png")]
        private var bigPicCls:Class;
        
        public function MyApplication() {
            var b:BitmapAsset = new bigPicCls() as BitmapAsset;
            addChild(b);
        }
    }
}
 
package {
    import flash.display.Sprite;
    import flash.text.TextField;
    
    public class PreLoader extends Sprite {
        public function PreLoader() {
            var t:TextField = new TextField();
            t.border = true;
            t.text = "loading......";
            
            addChild(t);
        }
        
        public function setProgress(loaded:uint,total:uint):void {
            var t:TextField = getChildAt(0) as TextField;
            t.text = "load: "+ loaded/1000 + "/" + total/1000;
            
            trace("load: "+ loaded/1000 + "/" + total/1000);
        }
    }
}
 

 

分享到:
评论

相关推荐

    AS3预加载SWF实例源码

    本实例源码主要讲解如何使用AS3(ActionScript 3.0)和Flash Professional来创建预加载程序。 在AS3中,预加载通常涉及到以下几个关键知识点: 1. **事件监听器**:AS3中的事件驱动模型是预加载的核心。你需要监听...

    itemRenderer 提前加载问题

    在描述中提到的博客链接指向了iteye.com上的一篇文章,虽然具体内容无法在此直接提供,但通常这类文章会探讨如何分析和解决ItemRenderer的预加载问题。可能的解决方案可能包括: 1. **按需加载**:仅在需要显示特定...

    [原创]游戏音乐音效播放管理类, 可以控制播放背景音乐, 和战斗音效

    4. 音频资源优化:可能包括预加载、缓存策略,提高游戏性能。 5. 控制接口:提供易于使用的API,让游戏开发者能轻松控制音效的播放、暂停、停止等操作。 对于想要学习游戏音频管理或者使用ActionScript进行游戏开发...

    基于flex3的flv播放器FXVideo源码

    通过学习FXVideo的源码,开发者可以了解如何在Flex中实现视频播放器,包括如何使用ActionScript 3操作视频流、处理用户交互(如播放、暂停、快进/后退)、以及如何优化视频播放体验(如预加载和动态缓冲)。...

    flex图片滚动

    在“flex PhotoViewer”中,ActionScript可能用于处理图片加载、滚动逻辑、用户交互事件等。 3. **图片查看器组件**:在Flex中,开发者可以自定义组件或使用预定义的UI组件来创建应用。这个项目可能使用了某种...

    flash 视频播放器源码

    Flash视频播放器源码是基于Adobe Flash... - 缓存策略,如预加载、缓存视频片段,能提升用户体验。 了解以上知识点后,开发者可以根据需求对Flash视频播放器源码进行定制化开发,创建符合自己需求的视频播放解决方案。

    flex legend

    .project文件是Eclipse IDE中项目的配置文件,它包含了项目的元数据,如项目名称、描述、构建路径、源代码路径等。对于Flex项目,它还可能包含了有关Flex Builder插件的信息。 .settings目录通常包含了一系列特定于...

    Flex 实训例子

    在Flex实训中,可能会有一些预编译的库或第三方组件,用于扩展Flex的基本功能,如数据处理、图形渲染或其他特定的交互效果。 7. **html-template**: 这个文件夹或文件可能包含Flex应用程序的HTML包装器模板。当Flex...

    Flex电子相册旋转一

    在Flex项目中,`TestProject`很可能是项目的名称。在解压后,这个文件夹通常包含以下几部分: 1. `src`目录:存放源代码,包括ActionScript类文件和MXML布局文件。 2. `assets`目录:存储项目中用到的资源,如图片...

    Flash CS3 中fl.*类库在 FB 中如何使用

    在Flash CS3中,开发人员经常使用ActionScript 3(AS3)进行编程,并与FlexBuilder集成以构建富互联网应用程序(RIA)。Flash CS3中的fl.*类库是Adobe官方提供的核心类库,包含了用于动画、图形绘制、数据处理等多个...

    使用FLEX3创建一个简单的FLV播放器.rar

    这个压缩包中的文档可能详细介绍了如何使用Flex 3创建一个自定义的FLV播放器,包括加载视频、控制播放、暂停、停止等功能。 3. **创建项目** 在Flex Builder中,首先需要创建一个新的Flex项目。选择"Flex Project...

    flex 做的首面页面

    - **.project**: Eclipse项目配置文件,用于识别和管理Flex项目在Eclipse或Flash Builder中的结构。 - **bin-debug**: 编译后的SWF文件和相关的资源通常会放在这里,调试版本的程序会在这个目录下生成。 - **...

    初学者Flex学习 最佳实例

    6. **WebRoot**:在Flex应用中,`WebRoot`通常包含HTML包壳文件,该文件负责在Web服务器上加载SWF(Flex应用程序的输出格式)。这也是与服务器端交互的地方,如处理HTTP请求和响应。 7. **项目构建与部署**:学习...

    <CitrusEngine系列教程四:Citrus的2D动画和摄像头>示例源码

    - **精灵表单(SpriteSheets)**:为了提高性能和减少加载时间,2D动画通常会打包到一个大图像中,称为精灵表单。CitrusEngine提供了方便的API来管理这些精灵表单,并从中提取特定的动画帧。 - **动画类**:...

Global site tag (gtag.js) - Google Analytics