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
- 2.自己总结的游戏框架小到中型游戏适用——从swf加载素材资源
- 1.自己总结的游戏框架,小到中型游戏适用——基本的panelbase(面板)
- android游戏开发框架libgdx的使用(十八)—资源加载管理AssetManager的使用
- 关于使用SharedObject来缓存游戏图片或者swf文件资源到客户端本地的研究
- 《从业务新手到业务老手——游戏开发中CRUD框架的基本组成部分》
- 程序员开发游戏使用的背景图片素材资源合辑
- android游戏开发框架libgdx的使用(二十)—资源预加载与AssetManager的使用
- 【Cocos Creator 基础教程(其他)】——游戏素材资源获取方法
- 网易游戏 从笔试到offer 经验分享——寻找最适合自己的公司和岗位
- 从三子棋游戏中GET到的新知总结
- 游戏的加载类要点和框架
- Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得
- Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得
- 游戏引擎AndEngine总结(九):三种加载图片资源的方法
- NVIDIA;从游戏显卡到游戏引擎的创新体验
- 从游戏分级制度所想到的
- 几个比较出名的游戏素材网站
- 关于独立游戏的一些素材网站
- 复习--C - Orders(字符串全排序,stl函数)
- OpenCV全屏显示图像H和W各有1像素的空白解决方法
- iOS6下UITextField垂直居中问题
- IE不能运行js,在IE浏览器js代码失效,js不能运行了怎么办
- hdoj 4893 2014年多校联合3 1007
- 2.自己总结的游戏框架小到中型游戏适用——从swf加载素材资源
- hdu4893 Wow! Such Sequence!,树状数组,线段树,单点修改,区间更新
- hdu 4888 Redraw Beautiful Drawings
- hdu4892 Defence of the Trees 最短路
- 数据结构--数组和广义表--以行逻辑链接的顺序表为存储结构的矩阵的基本运算(求矩阵乘积)
- an error has occurred.See the log file
- 工作问题积累(二十四)虚函数之进一步理解,结合汇编语言
- Single Number II
- Path Sum II Java