- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
游戏设计 内容管理(ContentPipeline).doc
游戏开发中,往往遇到一些游戏内容方面的问题,程序寻找不到资源,程序占用内存过大,加载进度不满意等,游戏内容管理是游戏开发中比较容易忽视的一块,一个好的内容管理系统,可以很轻松让游戏添加各种扩展修改,提升性能。 在开发引擎中,翻阅过很多资料,让我印象最深刻的便是xna,这里我想分成 ContentManager 和 ContentPipeline 去具体说明,在最后我会提供简易ContentPipeline代码. ? ? Soure Asset就是自定义的档案,经过Importer读入成Content DOM Type,然后再经过Processor转换成Output Type,然后编译成XNB档案,最后在游戏执行时读入XNB档。 白话一点的说就是就是一个档案藉由Importer读入成一个物件,在经过Processor转换成另一个物件, 以上这些动作都是在Design Time,也就是在电脑上执行到编译成XNB档为止,然后才是游戏的编译,举个例子,比如png,jpg,bmp等资源首先会通过content processor转换成特定的内容流,在游戏运行时通过read(BinaryReader)方法读取成指定类型资源,这样做runtime不需要对图片进行额外的解码,提升了读取效率。 ? 以下我以简化的content pipeline对内容预处理做一个分析,首先是它的架构图. ? 如果我们对一个类型进行处理, 首先要调用Manager中的Process方法,该方法会通过要处理的实例类型获得对应的处理器,最后并返回流. public static Stream Process(object target) { Stream stream = new MemoryStream(); ContentWriter writer = new ContentWriter(stream); // 得到处理器 ContentProcessor processor = GetProcessor(target.GetType()); // 写入类型 writer.Write(target.GetType().FullName); // 写入内容 processor.Process(writer, target); // 完成并返回 writer.Flush(); return stream; } 在 //写入类型 这里主要是为了下一章要讲的contentManager::load做准备,load中会首先从内容流中读出type的fullname在转成type并得到对应读取器进行类型还原,在此章中不具体描述。 ? 以上只是一个处理流程,在这个结构中,最重要的就是各种类型的processor了,如果做到一个易用可扩展是我们讲述的重点. ? 首先我们来看看,基础类型bitmap的处理器. class ImageProcessor : ContentProcessorBitmap { protected internal override void Process(ContentWriter writer, Bitmap sender) { // fiexd type int surfaceFormat = 0; // textur2d surfaceFormat 0 = color format int mipMap = 1; writer.Write(surfaceFormat); writer.Write(sender.Width); writer.Write(sender.Height); writer.Write(mipMap); Listbyte colors = new Listbyte(); for (int y = 0; y sender.Height; y++) { for (int x = 0; x sender.Width; x++) {
文档评论(0)