微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flash学习笔记之XmlManager加载策略

 
1.读取config/config.xml完毕<?xml version="1.0" encoding="UTF-8"?>
2.SysConfig.initConfigXml(new XML(e.target.data));SysConfig.configXml保存起来。

3.初始化initGame--XmlManager.getInstance().initRoleXml(){    var configXml:XML = SysConfig.getConfigXml();   取值

 <role>           <xml>             <item title="" size="557" key="serverinfo">config/serverinfo</item>           </xml>           <swf>             <item title="" size="557" key="">login/CrRole.swf</item>           </swf>        </role>

}

 

4.把值保存在 中XmlManager.getInstance().addXml(aimXml,XML(xmlLoader.data));xmlPool池中

 

5.ssetManager.getInstance().initRoleSwf();预加载

 

6,进入场景时候: XmlManager.getInstance().initSceneXml(); { <xml title="">         <item title="" size="19689" key="boyavatar">config/boyavatar</item>         <item title="" size="37242" key="boypart">config/boypart</item>         <item title="" size="16136" key="girlavatar">config/girlavatar</item>         <item title="" size="31825" key="girlpart">config/girlpart</item>         <item title="" size="13909" key="monster">config/monster</item>         <item title="" size="1629" key="skill">config/skill</item>         <item title="" size="345" key="itemInfo">config/itemInfo</item>         <item title="npc" size="3274" key="npcavatar">config/npcavatar</item>         <item title="" size="1321" key="effect">config/effect</item>       </xml> 把值保存在 中XmlManager.getInstance().addXml(aimXml,XML(xmlLoader.data));xmlPool池中 }

7.AssetManager.getInstance().initSceneswf()预加载

8.XmlManager.getInstance().initXml(); {    avatar[0] = getXml("boyavatar");    part[0] = getXml("boypart");    avatar[1] = getXml("girlavatar");    part[1] = getXml("girlpart");    monster = getXml("monster");    npcavatar = getXml("npcavatar");    effect = getXml("effect");    skillConf = initXmlToObj(getXml("skill"),"@id");

  //xmlPool中去取值初始化   public function getXml(key:String):XML{    if(xmlPool[key] != undefined){     return xmlPool[key];    }    return null;   }

}

 

 

package mmo.manager {
	import flash.events.Eventdispatcher;
	import flash.utils.Dictionary;
	
	import mmo.asset.loader.ILoader;
	import mmo.asset.loader.XmlLoader;
	import mmo.config.SysConfig;
	import mmo.datastruct.HashMap;
	
	public class XmlManager extends Eventdispatcher
	{
		private static var instance:XmlManager = null;
		public static const SERVERINFO:String = "serverinfo";
		public static var resourceMap:HashMap=new HashMap();
		
		private var xmlPool:Dictionary = null;
		
		public var taskDialogueConf:Object;
		public var taskConf:Object;
		public var npcConf:Object;
		public var itemConf:Object;
		public var goodsConf:Object;
		public var goods:Object;
		public var channelConf:Object;
		public var transferConf:Object;
		public var shops:Object;
		
		public var serverinfo:XML;
		public var avatar:Vector.<XML> = new Vector.<XML>(2);
		public var part:Vector.<XML> = new Vector.<XML>(2);
		public var monster:XML;
		public var npcavatar:XML;
		public var effect:XML;
		public var resource : XML;
		//public var skillConf:Object;
		public var skill : Object;
		
		public function XmlManager()
		{
			xmlPool = new Dictionary();
			
//			trace(SysConfig.getConfigXml());
		}
		
		public static function getInstance():XmlManager
		{
			if(instance == null){
				instance = new XmlManager();
			}
			return instance;
		}
		
		public function initRoleXml():ILoader{
			var xmlMap:HashMap = new HashMap();
			
			var configXml:XML = SysConfig.getConfigXml();
			
			for each(var config:XML in configXml.resource.role){
//				trace(config);
				for each(var item:XML in XMLList(config.xml).children()){
//					trace(item.@key+"_"+item.text()+"_"+item.@title);
					xmlMap.put(String(item.text()),String(item.@key));
					resourceMap.put(String(item.text()),String(item.@title));
				}
			}
			return loadXML(xmlMap);
		}
		
		public function initSceneXml():ILoader{
			var xmlMap:HashMap = new HashMap();
			
			var configXml:XML = SysConfig.getConfigXml();
			
			for each(var config:XML in configXml.resource.scene){
				//				trace(config);
				for each(var item:XML in XMLList(config.xml).children()){
//					trace(item.@key+"_"+item.text()+"_"+item.@title);
					xmlMap.put(String(item.text()),String(item.@title));
				}
			}
			return loadXML(xmlMap);
		}
		
		private function loadXML(xmlMap:HashMap):ILoader
		{
			var xmlLoader:XmlLoader=new XmlLoader(xmlMap);
			return xmlLoader;
		}
		
		/*public function isNeedLoadXml():Boolean
		{
			return xmlMap.keys().length > 0;
		}*/
		
		public function initXml():void
		{
			avatar[0] = getXml("boyavatar");
			part[0] = getXml("boypart");
			avatar[1] = getXml("girlavatar");
			part[1] = getXml("girlpart");
			monster = getXml("monster");
			npcavatar = getXml("npcavatar");
			effect = getXml("effect");
			resource = getXml("resource");
			//skillConf = initXmlToObj(getXml("skillInfo"),"@id");
			skill = initXmlToObj(getXml("skill"),"@skillId");
			
			itemConf = initXmlToObj(getXml("itemInfo"),"@id");
			
			taskDialogueConf = initXmlToStringObj(getXml("taskDialogue"),"@id");
			taskConf = initXmlToObj(getXml("task"),"@id");
		}
		public static function initXmlToStringObj(data:XML,keyName:String):Object
		{
			var obj:Object = new Object();
			for each(var item:XML in data.elements()){
				obj[String(item[keyName])] = item;
			}
			return obj;
		}
		
		public static function initXmlToObj(data:XML,keyName:String):Object
		{
			var obj:Object = new Object();
			for each(var item:XML in data.elements()){
				obj[int(item[keyName])] = item;
			}
			return obj;
		}
		
		public function addXml(key:String,value:XML):void{
			if(xmlPool[key] == undefined){
				xmlPool[key] = value;
			}
		}
		
		public function getXml(key:String):XML{
			if(xmlPool[key] != undefined){
				return xmlPool[key];
			}
			return null;
		}
	}
}

 
 
package mmo.config {
	import flash.display.Stage;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
    
    public class SysConfig {
        public static var hasInit:Boolean = false;
		public static var hasInitSystem:Boolean = false;
        private static var configUrl:String = "config/config.xml";
        private static var configXml:XML;
        public static var path:String = "F:/assets/";
        public static var parameters:Object;
        public static var version:String;
        public static var session:String;
        public static var DEBUG:int = 1;
        public static var RELEASE:int = 0;
        public static var loadType:uint = DEBUG;
        public static var runType:uint = 0;
        public static var logType:uint = 0;
        public static var EDType:Boolean = false;
        public static var FNType:uint = 0;
        public static var funcList:Array = [];
        public static var stage:Stage;
        public static var hasIp:Boolean;
        public static var ip:String;
        public static var port:int;
        public static var policyport:int;
        public static var loaderContext:LoaderContext;
		
		public static var roleSize:uint = 81920;
		public static var allSize:uint = 2846720;
        public static var loadSize:uint = 0;
        public static var reckonTime:uint = 20000;

        public static function initRunDomain():void{
            loaderContext = new LoaderContext();
            loaderContext.checkPolicyFile = false;
            loaderContext.applicationDomain = ApplicationDomain.currentDomain;
        }
        public static function initConfigXml(xml:XML):void{
            hasInit = true;
            configXml = xml;
			
            version = String(configXml.version);
            loadType = int(configXml.loadType);
            runType = int(configXml.runType);
            logType = int(configXml.logType);
            EDType = int(configXml.EDType)!=0 ? false : true;
            FNType = int(configXml.FNType);
            if (FNType == SysConfig.DEBUG){
                funcList = String(configXml.FNList).split(";");
            };
            if (runType == SysConfig.DEBUG){
                session = configXml.session.toString();
            };
        }
        public static function getConfigXml():XML{
            return configXml;
        }
        public static function get loadEncryption():Boolean{
            switch (loadType){
                case SysConfig.DEBUG:
                    return false;
                case SysConfig.RELEASE:
                    return true;
            };
            return (true);
        }
        public static function toRandom(url:String):String{
            return url + "?v=" + Math.random();
        }
        public static function toSession(url:String):String{
            return url + "?v=" + SysConfig.session;
        }
        public static function toVersion(url:String):String{
            return url + "?v=" + SysConfig.version;
        }
        public static function getConfigUrl():String{
            return SysConfig.path + toRandom(configUrl);
        }
        public static function getMainUrl():String{
			if(!loadEncryption){
				var loaderURL:String = stage.loaderInfo.loaderURL;
//				trace(loaderURL.substr(0,loaderURL.lastIndexOf("\\")+1));
				loaderURL = loaderURL.substr(0,loaderURL.lastIndexOf("\\")+1)+configXml.resource.@url;
//				trace(loaderURL);
				return toVersion(loaderURL);
			}
            return SysConfig.path + toVersion(configXml.resource.@url);
        }

    }
}
<data> <version>1.0.0.0</version> <loadType>1</loadType> <runType>0</runType> <logType>0</logType> <EDType>0</EDType> <FNType>0</FNType> <FNList>1;2;3;4;5;6;8;9;10;11</FNList> <session>4403d2bc075ab9d928744495462ba807</session> <resource size="1397754" url="Main.swf"> <role> <xml> <item title="服务器配置" size="557" key="serverinfo">config/serverinfo</item> </xml> <swf> <item title="角色库" size="557" key="">login/CrRole.swf</item> </swf> </role> <scene> <xml title="游戏数据"> <item title="角色形象配置" size="19689" key="boyavatar">config/boyavatar</item> <item title="角色装备配置" size="37242" key="boypart">config/boypart</item> <item title="角色形象配置" size="16136" key="girlavatar">config/girlavatar</item> <item title="角色装备配置" size="31825" key="girlpart">config/girlpart</item> <item title="怪物配置" size="13909" key="monster">config/monster</item> <item title="技能配置" size="1629" key="skill">config/skill</item> <item title="itemInfo配置" size="345" key="itemInfo">config/itemInfo</item> <item title="npc形象配置" size="3274" key="npcavatar">config/npcavatar</item> <item title="特效配置" size="1321" key="effect">config/effect</item> <item title="taskDialogue" size="1321" key="taskDialogue">config/taskDialogue</item> <item title="task" size="1321" key="task">config/task</item> <item title="resource" size="1321" key="resource">config/resource</item> </xml> <swf> <item title="界面库" size="462617" key="">ui/AssetUI.swf</item> <item title="表情库" size="107952" key="">face/face.swf</item> <item title="认形象库" size="107952" key="">avatar/default.swf</item> </swf> </scene> </resource></data>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐