AS3资源加载模式迁移@陶冶2010.12.6项目案例•本草仙木项目中的加载模式在资源拆分之前是在Loading时全部加载,导致Loading等待时间过长。•经讨论,决定最终采用异步加载方式加载拆开的资源,加载过程中显示Loading。项目案例•此案例难点在于:确保以前的代码能够在异步环境中完美执行,不会报错。•get()操作数量>120次•get()操作执行完成之后,会立即对获取的资源操作。而这个时候,加载还没有完成,不能对资源scale等。•get()操作分散在各个类中,如果一一修改,会出现无法预料的BUG。解决方案•资源加载模式迁移:•对资源的get()操作进行代理,不立即执行后续的代码,而是将后续的操作用备忘录的模式记录下来,等待加载完成。•难点:•之前的同步操作要转换成异步操作,有可能出现注册点问题,或者可能出现“无法访问空对象引用的属性或方法。”DelayLoader类•publicfunctionDelayLoader(_symbolName:String,targetURL:String,_autoRemoveSelf:Boolean=true,_appDomain:ApplicationDomain=null,_loadingAnimation:MovieClip=null,_isMovieClip:Boolean=true):void//@author陶冶.taoye@tainengmiao.comDelayLoader类•varloader:DelayLoader=newDelayLoader(name,source,autoRemove,null,null,!isPNG);•if(isPNG)loader.setDelayCache();•loader.onLoadCompleted=function(){};•returnloader;迁移步骤•检查ApplicationDomain.currentDomain是否包含类定义。如果是,return;不是则往下执行。•依次检查Loader.contentLoaderInfo.applicationDomain,如果依然不包含定义,则往下执行。•使用内置的loader加载images/resources/元件名.swf。•如果依然获取不到定义,将加载product_locked_icon.png,显示锁图标。解决过的问题•作物的注册点不统一。•加载完成之后,不能addChild(newXXX)•作物loading位置不一。•作物、icon缩放比例不对。•icon空白。……总结•尽量保持代码的原始形态。•分析问题要全面。•对已有的操作方式做出最小的改动。•对于资源等必须采用统一的标准,否则会出现上一页的问题。谢谢