游戏架构技术.doc

上传人:大米 文档编号:561614941 上传时间:2023-08-12 格式:DOC 页数:6 大小:36.51KB
返回 下载 相关 举报
游戏架构技术.doc_第1页
第1页 / 共6页
游戏架构技术.doc_第2页
第2页 / 共6页
游戏架构技术.doc_第3页
第3页 / 共6页
游戏架构技术.doc_第4页
第4页 / 共6页
游戏架构技术.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《游戏架构技术.doc》由会员分享,可在线阅读,更多相关《游戏架构技术.doc(6页珍藏版)》请在金锄头文库上搜索。

1、先谈前端主架构,前端程序主架构有两个主要任务:1,要从架构高度合理划分前端各模块,提出可行的实现方案;2,从AS级别搭建程序架构(非文档级别),制定前端编程规则和接口,规范程序各部分的职责划分。这两个任务其实包括很多具体工作,比如:游戏启动流程制定,确定哪些SWF文件需要外部加载,那些功能可以从主程序剥离出去单独实现,前端配置文件怎么处理,公共素材怎么处理,MVC三层怎么划分,主程序框架的选定,主程序怎么和后台通讯,主程序如何与模块协作,哪些代码应该放在主程序中,哪些代码应该放在模块里,主程序如何既能提供模块所需要的一切功能和数据,同时又相对模块自我保护等等等等。其实我谈的还只是一些大的方面,

2、具体到实现的级别,还有大量细节工作要做。而这些工作在项目启动之初都是非常重要的,直接影响到项目中后期的开发和维护效率。上面提到的那些点,我不可能全讲一遍,不然就不叫“浅谈FLASH WEB GAME”了!我只挑两个比较核心的内容跟大家略做探讨,就是前端AS框架和模块划分的问题。先谈前端框架:现在市面上流行很多前端框架,不管是针对“FLASH”的,“FLEX”的还是“通用的”都有。我们是否一定需要框架,或者必须使用某个框架,这完全是仁者见仁智者见智的事,从最终的结果上讲,争论这个问题意义不大,我相信一个5W行左右的项目,任何有5年以上编程经验的人,不管用什么作战策略,最终都能攻下山头,把项目做出

3、来。但有一点至关重要:你必须能完全把握你的架构和你使用的框架,并能跟你的前端同事解释清楚。那好坏架构的区别在哪里呢?区别在于好的架构在开发过程中会更轻松,你不用天天担心的你代码,不用每天不停的写文档,以防止自己忘了复杂的逻辑,你可以在任何时间开始写代码,在任何时间去玩会儿游戏然后回来接着写;区别在于好的架构更符合业界标准,更容易被传统和正统的程序员接受理解;区别在于你可以用很简单的几句话就把你的架构思想描述清楚,用几个很简单的文档就能让别人接手你的代码,在人事变动和工作交接的时候让自己更轻松;区别在于当你掌握了一种通用框架或者自己总结一套成熟的架构后,你几乎可以套用以后的大部分项目,并不断完善

4、它,开发越来越轻松,速度却越来越快!我们的项目,主程序使用的是pureMVC框架,而主UI部分是自己写的。主程序和主UI相互独立,可以单独编译测试。主程序是纯代码,用FLEX SDK编译,而主UI则是界面和AS混写并用FLASH编译。这样就把MVC中的V从物理层面上完全独立了。pureMVC框架正如其名字,是一款“纯粹”的MVC框架,在我看来,他只是帮我们实现了MVC的编程思想和套路,其它多余的功能一点没有,这使它具有更高的通用性,也是它最可爱的地方。根据我们的经验,pureMVC单核心版就已经完全可以应对主程序有效代码在10W行以下的项目了。但在我跟很多没有用过框架的前端朋友聊天中,发现他们

5、对这些框架本身就有抵触心理,或者有些对MVC模式都理解的不深刻,用起MVC框架又怎能得心应手?还有一些更过分的朋友把自己的问题也归结到框架上,说什么用了pureMVC框架后,自己的项目编译一下要十几分钟,我听了之后哭笑不得,项目编译慢一般是因为没有合理划分模块导致主程序过大才导致的,跟框架有什么关系?如果因为大家的种种误解和这些人的言论而导致一些新人错过学习这么一款优秀的框架,我觉得实为憾事! pureMVC既然是一种MVC框架,这就意味着你首先要熟悉MVC。这种熟悉绝对不是对MVC的直译:模型、视图、控制器,而是要真正理解为什么要把程序划分成这几部分,在划分主程序模块时,要时刻能站在MVC的

6、角度考虑问题,而当面对一段实际的代码时,能快速准确的判断,这段代码应该放在MVC中的哪部分。pureMVC最佳实践这份短短几十页的文档中,可以说处处闪烁着MVC的思想火花,不但清楚地阐述了怎么使用框架,而且时刻从MVC的角度告诉我们应该把哪些逻辑放在哪些部分中,应该注意什么问题。这个文档早已经有中文版,有兴趣的朋友可以自己去看看,文中有的,我这里就不赘述了。我只结合自己的体验谈一些文中可能没有涉及的,也是在真正开发中才会碰到的问题。 1,模型部分在实际开发中除了存储数据,还有其他作用么?是的,其实它的实际职责非常多。它要给Command和Mediator提供接口,响应用户操作,进行数据操作或者

7、请求远程数据服务,进行数据的序列化和反序列化,得到异步数据后可能还要检查数据合法化。但不管怎么样,它始终是在和数据打交道,同时也应该是你的主程序中唯一可以直接和数据打交道的管道,别的部分要想和数据有接触,首先要问问它同意不同意。模型处理完数据会以Notification的消息方式通知Command或者Mediator。但绝对不能在Proxy中直接调用Mediator,这是为了保证数据层的独立性、可移植性和重用性,也简化了你的架构思想。不过可移植性这个优势,估计很多搞FLASH WEB GAME的朋友暂时都没啥机会体验,呵呵。 2,Command,Command,Command!连叫三声“Com

8、mand”,希望可以引起大家的注意。因为Command的使用,在很大程度上反映着你对pureMVC框架的理解,甚至是对MVC模式的理解深度。在pureMVC框架中,各部分通讯是用Notification消息,Proxy可以给Command和Mediator发消息,Command可以给Command和Mediator发消息,Mediator可以给Command和Mediator发消息,怎么样?你现在是不是点晕了,这是正常的,其实我也有点晕!当你代码写到一定规模后,你会更晕。其实pureMVC框架这么设计本来是为了让MVC各部分尽量脱耦,但这带来一个负面情况就是消息发送与接收机制设计的太灵活了,灵

9、活对小项目是好事,但对大项目来说,往往意味着混乱,甚至会导致灾难。那怎么办呢?只能靠我们的自觉性自我约束,简化架构思想了。根据pureMVC最佳实践中的建议,我的做法是这样的,尽量使用Command,让Command成为Mediator与Proxy之间通讯的唯一桥梁,Mediator和Proxy中发出的Notification,接收者一定是某个Command,然后再由Command处理并将结果转发给真正的消息接收者,Command就算仅仅起一个转发作用,仅仅有不到10行代码,也要创建一个Command类。这样不仅使你的架构更加清晰,而且也更符合MVC思想,Command类的大量存在还使你架构的

10、业务逻辑具有了更好的封装性和扩展性,可谓是一箭三雕,何乐而不为?唯一的负面影响可能是你需要创建和维护更多的Command类文件,但相对于优势而言,这点影响不算啥。 3,我知道现在可能还有一些朋友在用FLASH IDE写代码,这些朋友的执着让人钦佩,但我想任何一个熟练使用过FLEX BUDIER、FD或者FDT的朋友,都绝不会再回头使用FLASH IDE写代码了。不对啊?不是谈pureMVC的么?怎么扯到IDE上去了?这是因为我现在要讨论的问题就和IDE有关,假如你现在用的还是FLASH IDE的话,除了随时写文档外,我真的很难想出一个很好的方案可以让你在没文档支撑的情况下,轻松掌握和随时维护几

11、万行代码。可如果你使用的是FDT,就可以在没有文档的情况下,利用“ctrl + r”和“ctrl + 鼠标左键”,以及全文件搜索等工具,瞬间搞清楚代码之间的联系和逻辑,找出要修改的地方。OK,终于到pureMVC了。如果你使用的是FDT,并且开始尝试使用pureMVC框架,可在使用的过程中,你发现你在写主程序时,还是不停的使用“ctrl + 鼠标左键”,而不是“ctrl + r”,这说明你必须重新审视你对pureMVC框架的理解了,请审查你的Mediator类,看里面是不是充斥着大量的public方法,如果你的对象之间依旧是通过public方法进行引用,而不是通过Notification通讯的

12、,那你也没有必要继续使用pureMVC框架了。 4,单例模式影响到底有多大?pureMVC是一个完全依赖单例模式的框架。单例模式似乎在AS界一直有很大争议,这样的话,pureMVC肯定也会有相应的争议了。持反对意见的人,大多集中在“性能”和“团队协作”方面,他们认为一个单例持有过多引用会带来性能问题,而且生怕在团队协作中自己的单例类被人无意修改,引发离奇的BUG。性能方面,我之前也没做过10W以上的项目,不敢妄言,但10W行以下的项目,绝对没有问题,如果你两三万行的架构就开始碰到主架构性能问题,估计十有八九是自己的代码写的有问题;团队协作方面,我觉得pureMVC的Fa?ade模式是非常灵活好

13、用的,大家可以略做讨论,制定一个简单的规则,比如模块只能通过fa?ade获取数据和发送Notification,不能直接调用主程序其他CLASS,只要架构程序员不犯错,模块程序员甚至连犯错的机会都没有,如果他们有,还是你的架构思路有问题,请继续审视自己的代码。反正单例模式的问题到底是什么,我到现在也没完全搞懂,主要是我们的项目没碰到过此类问题,希望碰到过的朋友能再仔细跟火山说说,我也好弄清楚问题到底出在哪里了,自己以后可以更好的避免此类问题发生。 额,框架部分先谈上面4点吧,赶快进入下一个话题,模块划分:模块划分主要包括“核心模块划分”和“子模块划分”。核心模块的划分思路是这样的:它们是游戏启

14、动所必须的,相互之间是紧密联系的,还要经常的被子模块调用;而相对的,子模块的划分思路是:他们在游戏启动过程中不是必须的,可以在游戏过程中再加载,子模块相互之间基本上完全没有联系,一个子模块的增加和删除不会影响到任何其他子模块,子模块可能需要调用主程序的接口或者获得主程序的数据,但主程序绝对不应该依赖某个子模块。 明确了模块划分思路再具体看看哪些部分应该划分为核心模块,哪些部分应该划分为子模块。一般情况下,核心模块按照游戏启动顺序包括:一个壳子SWF 配置文件包 登录注册SWF 主程序SWF 主UI的SWF 公共素材包。而子模块相对来说简单很多,比如具体的某个小游戏,某个场景,以及某个场景里的触

15、发功能等等。下面我对核心模块逐一略做解释。“一个壳子SWF”:这是一个体积很小,但意义很大的SWF;它后面总是跟着随机变量,确保每次用户加载的都是最新的;它里面定义着一些需要经常更新而且每次更新都必须保证用户也在第一时间就得到最新值的变量;它里面最好有一个简单背景图,保证用户在超低网速的时候输入游戏网址不至于长时间面对一片空白;它里面有安全策略的设定,是我们游戏和很多第三方平台合作的基石;它里面还定义着主程序被加载进来之前的游戏启动流程等等。“配置文件包”:核心模块版本号啊,全局文字说明啊,service接口定义啊,各个核心模块需要的配置信息啊什么的,一般是一些XML文件。“登录注册SWF”:

16、这个简单,在加载重量级的SWF前,先加载登录注册SWF,可以保证用户第一时间就能打开登录注册界面,而且可以有效节省服务器带宽。“主程序SWF”:这个就是我前面费了好大劲讲的主程序部分了。“主UI”:主程序和主UI为什么要分开两个SWF,我前面已经提过了,后面还有说明,这里暂时不讲。“公共素材包”:公共素材包是一个游戏不可缺少,但也不能过分依赖的东西。它包括一些全局的道具和效果,比如表情、技能特效、场景传送门等等。公共素材包里面最好就是一些简单的动画,体积小功能简单,严禁在公共素材包里添加上百K的东西,或者代码上百行的小模块,公共素材包建议500K以下。 看了上面的讲解,你可以能觉得核心模块分那么多,太麻烦了。不错,在我看来,对SWF加载流程的分解和控制,对异步程序的掌控正是衡量一个AS程序员是否经验丰富,是否足够老道的重要指标,很多从其它语言转到AS并有多年编程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号