2.自己总结的游戏框架小到中型游戏适用——从swf加载素材资源

来源:互联网 发布:linux yum命令 编辑:程序博客网 时间:2024/04/27 14:11

工作8个多月,自己有空就会总结一下学到的东西,然后就写写停停的捣鼓了些东西出来。今天来和大家分享一下。

做一个东东,我觉得其中一个要点就是把需要的素材资源从美术那边(swf)里获得需要的东西。


首先是单例。。这个就不多说了吧。。

package manager{import flash.display.Loader;import flash.events.Event;import flash.events.IOErrorEvent;import flash.media.Sound;import flash.net.URLRequest;import flash.system.ApplicationDomain;import flash.utils.Dictionary;import flash.utils.getDefinitionByName;import flash.utils.setTimeout;/** *  * @author joj */public class AssetsManager{private static var _instance:AssetsManager;private var loader:Loader;private var domain:ApplicationDomain;private var m_loadQueue:Dictionary;private const STATUS_WAIT:String = "0";private const STATUS_LOADING:String = "1";private const STATUS_COMPLTE:String = "2";private var isLoading:Boolean;private var m_loadComplete:Function;private var m_sounds:Dictionary;private var m_waitingQueues:Array;private var m_swfsDomain:Dictionary;private var m_assetsLoader:Dictionary;private var COMMON_URL:String = "assets/common.swf";/** * 这个单例就不用多说了吧。。 * @return  */public static function get instance():AssetsManager{if(!_instance){_instance = new AssetsManager();}return _instance;}public function AssetsManager(){//加载队列m_loadQueue = new Dictionary();m_sounds = new Dictionary();m_swfsDomain = new Dictionary();m_assetsLoader = new Dictionary();m_waitingQueues  = [];}/** *  * @param onInitCom */public function Init(onInitCom:Function):void{LoadCommonAssets(onInitCom);}private function LoadCommonAssets(onInitCom:Function):void{addLoadQuue(COMMON_URL,onCom);function onCom():void{if(onInitCom)onInitCom();}}/** *  * @param _name * @return  */public function getCommonAsset(_name:String):*{return getDisObject(COMMON_URL,_name);}/** *  * @param _url * @param onCom */public function addLoadQuue(_url:String,onCom:Function):void{if(m_loadQueue[_url] || m_loadQueue[_url] == STATUS_COMPLTE){onCom();return;}m_waitingQueues.push(_url);loadNext();m_loadComplete = onCom;//?}private function loadNext():void{if(isLoading){setTimeout(loadNext,0.01);return;}isLoading = true;m_loadQueue[m_waitingQueues[0]] = STATUS_LOADING;var url:String = m_waitingQueues[0];//解析出文件类型  .后面的3个字母var type:String = String(url.split(".")[1]).toLowerCase();switch(type){case "swf":var loader:Loader = new Loader();loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onSwfLoadComplete);loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onIoErrorHandle);loader.load(new URLRequest(url));m_assetsLoader[url] = loader;break;case "mp3":var sound:Sound = new Sound(new URLRequest(url));sound.addEventListener(Event.COMPLETE,onSwfLoadComplete);m_sounds[url] = sound;m_assetsLoader[url] = sound;break;default:throw "错误的文件URL"break;}function onSwfLoadComplete(e:Event):void{if(type == "swf"){domain = new ApplicationDomain();domain = e.currentTarget.applicationDomain;  m_swfsDomain[url] = domain;}m_loadQueue[url] = STATUS_COMPLTE;onLoadComplte(url)}}private function onLoadComplte(_url:String):void{m_loadQueue[_url] = STATUS_COMPLTE;m_waitingQueues.shift();if(m_waitingQueues.length <= 0 && m_loadComplete)m_loadComplete();isLoading = false;}/** *  * @param _url * @param _name * @return  * @throws "加载未完成" * @throws "没找到:"+_url,_name */public function getDisObject(_url:String, _name:String):*{if(m_loadQueue[_url]){if(m_loadQueue[_url] == STATUS_COMPLTE){if(m_swfsDomain[_url].hasDefinition(_name)){var cls:Class = m_swfsDomain[_url].getDefinition(_name) as Class;return new cls }else{throw "没找到:"+ _url, _name;} }else{throw "加载未完成";}}throw "没找到:"+ _url, _name;}/*public function getClass(_url:String, _name:String):Class{if(m_loadQueue[_url]){if(m_loadQueue[_url] == STATUS_COMPLTE){if(domain.hasDefinition(_name)){var cls:Class = domain.getDefinition(_name) as Class;return cls}}else{throw "加载未完成"}}throw "没找到:"+ _url;}*//*public function getFunctoin(_url:String, _name:String):Function{if(m_loadQueue[_url]){if(m_loadQueue[_url] == STATUS_COMPLTE){if(domain.hasDefinition(_name)){var cls:Function = domain.getDefinition(_name) as Function;}return cls}else{throw "加载未完成"}}throw "没找到:"+ _url;}*//** *  * @return  */public function getAllMc():*{trace(domain.parentDomain)//domain.return domain.getQualifiedDefinitionNames();}/** *  * @param _url * @return  */public function getAssets(_url:String):*{return m_sounds[_url];}/** *  * @param assetsUrl */public function disposeAssets(assetsUrl:Array):void{for (var i:int = 0; i < assetsUrl.length; i++) {//domain.if(m_assetsLoader[assetsUrl[i]]){if(m_assetsLoader[assetsUrl[i]] is Loader){if(assetsUrl[i] != COMMON_URL){(m_assetsLoader[assetsUrl[i]] as Loader).unloadAndStop();}}else if(m_assetsLoader[assetsUrl[i]] is Sound){//(m_assetsLoader[assets[i]] as Sound).}}}}private function onIoErrorHandle(event:IOErrorEvent):void{trace(event.errorID,event.toString())}}}

当预加载完成后可以通过
getDisObject
的方式获得swf里面有相应链接名的资源


0 0
原创粉丝点击