• loader,URLLoader,URLStream这个三种动态加载资源的具体使用场合,以及区别


    1、Loader

    Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。

    在使用Loader加载数据,添加侦听事件时,一定要给LoadercontentLoaderInfo属性增加事件,而不是给Loader对象增加事件。

    Loader侦听事件时,用contentLoaderInfo来侦听:

     1 public function LoderDemo()
     2         {
     3             stage.align = StageAlign.TOP_LEFT;
     4             stage.scaleMode = StageScaleMode.NO_SCALE;
     5             
     6             var loader:Loader = new Loader();
     7             loader.load( new URLRequest( "test.png" ) );
     8             loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError); 
     9             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    10         }

     在加载内容时必须侦听它的IOErrorEvent事件,以防出现加载错误

      必须把加载错误的情况考虑进去,常见的还有Http的请求错误

    1 urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
    1 protected function onError(event:IOErrorEvent):void
    2         {
    3             trace(" url not found....")
    4         }

     用copyPixels方法来复制图片

    protected function onComplete(event:Event):void
            {
                var loaderInfo:LoaderInfo = event.target as LoaderInfo;
                trace( loaderInfo.content );
                trace( loaderInfo.content is Bitmap );
                var bmp:Bitmap = loaderInfo.content as Bitmap;
                //addChild( bmp );
                var bd:BitmapData = bmp.bitmapData;
                var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 );
                newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() );
                var newBmp:Bitmap = new Bitmap( newBD );
                addChild( newBmp );
            }

    2、 URLLoader

    URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在下载文本文件、XML 或其它用于动态数据驱动应用程序的信息时,它很有用。 URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于 ActionScript。 它会发出有关下载进度的通知,通过 bytesLoaded 和 bytesTotal 属性以及已调度的事件,可以监视下载进度。

    使用dataFormat属性来定义加载的类型

    public function URLLoderDemo()
            {
                stage.align = StageAlign.TOP_LEFT;
                stage.scaleMode = StageScaleMode.NO_SCALE;
                
                var urlLoader:URLLoader = new URLLoader();
                //指定以原始二进制数据形式接收下载的数据。
                urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                urlLoader.load( new URLRequest( "test.png" ) );
                urlLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
    urlLoader.addEventListener(Event.COMPLETE, onLoader); }

    如果使用URLLoader来加载图片,那么必须使用Loader来作为中转才可以显示加载的内容,这大概就是为什么有了URLLoader后,Loader类存在的理由。


     通过Loader的loadBytes属性来加载二进制的内容

    protected function onLoader(event:Event):void
            {            
                var urlLoader:URLLoader = event.target as URLLoader;
                trace( urlLoader.data ); //二进制数据
                
                var loader:Loader = new Loader();
                loader.loadBytes( urlLoader.data );
                addChild( loader );
            }

     使用加载上来的图片内容需要通过loaderContentInfo来实现

    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

    又重新做会Loader所做的工作

    protected function onComplete(event:Event):void
            {
                var loaderInfo:LoaderInfo = event.target as LoaderInfo;
                trace( loaderInfo.content );
                trace( loaderInfo.content is Bitmap );
                var bmp:Bitmap = loaderInfo.content as Bitmap;
                //addChild( bmp );
                var bd:BitmapData = bmp.bitmapData;
                var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 );
                newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() );
                var newBmp:Bitmap = new Bitmap( newBD );
                addChild( newBmp );
                
            }

    3、 URLStream

     

    URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。 在 URLStream 中的读取操作是非阻塞模式的。 这意味着您在读取数据之前必须使用 bytesAvailable 属性来确定是否能够获得足够的数据 。 如果不能获得足够的数据,将引发 EOFError 异常。

  • 相关阅读:
    html中#include file的使用方法
    【leetcode】Next Permutation
    diameter
    android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理
    【剑指offer】链表倒数第k个节点
    【经典面试题】实现平方根函数sqrt
    对CAB文件进行数字签名
    实习面试总结
    从队列、二叉树到优先队列
    句子的理解
  • 原文地址:https://www.cnblogs.com/actionkong/p/3448679.html
Copyright © 2020-2023  润新知