如何用BulkLoader获得swf文件中的类

本文介绍了一种使用BulkLoader加载SWF文件的方法,并通过示例代码展示了如何获取SWF中的类实例。此外,还讨论了如何改进BulkLoader的灵活性以更好地支持不同类型的资源加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天有人问如何加载多个swf并使用其中的类我推荐bulkloader,今天又在网上看到一个帖子:有人还下载了源代码并修改了其中的LoadingItem.as和ImageItem.as以此来获得类实例?说“使用BulkLoader统一管理资源载入时,发现BulkLoader类并没有获到swf应用程序域的相关方法”我觉得很奇怪不应这样呀所以下了源码看了看,结果真的有不需要额外修改,或许是作者后来修改的但确实提供了该方法。简单介绍一下用法我是在flex中实现的

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/halo" creationComplete="init()">
 <fx:Style source="default.css"/>
 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import br.com.stimuli.loading.BulkLoader;
   import br.com.stimuli.loading.BulkProgressEvent;
   import br.com.stimuli.loading.loadingtypes.ImageItem;   
   import flash.events.Event;   
   import mx.core.UIComponent;
   private var bulkloader:BulkLoader = new BulkLoader("mainLoading");
   public function init():void{

 //获得监听没啥好说的
    bulkloader.addEventListener(BulkLoader.COMPLETE, onCompleteHandler);
    bulkloader.addEventListener(BulkLoader.PROGRESS, onProgressHandler);

//加载你要导入的swf
    bulkloader.add("Main.swf");
    bulkloader.start();
   }
   public function onCompleteHandler(event:Event):void{

//用get方法获得获得实例,用强制类型转换获得imageitems对象实例(该实例下有getDefinitionByName)Rect是我声明的类名
    var t:Class = ImageItem(bulkloader.get("Main.swf")).getDefinitionByName("Rect") as Class
    if (t == null) {
     trace(t is null);
    }else{ 
     var tt:Sprite = new t;
    }    
    var c:UIComponent = new UIComponent;
    c.addChild(tt);    
    this.addElement(c);
   }
   public function onProgressHandler(event:BulkProgressEvent):void{
    trace("Loaded" , event.bytesLoaded," of ",  event.bytesTotal);
   }
  ]]>
 </fx:Script>
</s:WindowedApplication>

为啥不把getDefinitionByName定义成loaditem父类方法呢?毕竟加载图像,xml,video是不需要的,所以没有添加在父类里面(个人意见)

你也可以修改loaditem把它透出来就这样不需要强制类型转换了。在loaditem中添加方法

        public function getDefinitionByName(className : String) : Object{
            return null;
        }

在imageitem getDefinitionByName方法前面添加override就可以了

就可以直接var t:Class = bulkloader.get("Main.swf").getDefinitionByName("Rect") as Class

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值