Flash学习笔记之XmlManager加载策略

来源:互联网 发布:excel数据在另一列分组 编辑:程序博客网 时间:2024/06/05 22:30
 
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.@key));resourceMap.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>

原创粉丝点击