Flash学习笔记之XmlManager加载策略
?
1.读取config/config.xml完毕<?xml version="1.0" encoding="UTF-8"?> 2.SysConfig.initConfigXml(new XML(e.target.data));SysConfig.configXml保存起来。
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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |