加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash学习笔记之XmlManager加载策略

发布时间:2020-12-15 06:57:05 所属栏目:百科 来源:网络整理
导读:? 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.ge
?
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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读