【转载】u3d游戏客户端架构(---)

原文:http://blog.csdn.net/xtxy/article/details/8474506

主要是mvc架构,

M层为数据层,两个用途:1保存数据;2发送数据更新信息;

V层为视图层,两个用途:1接受用户从界面上的操作;2根据M层的数据显示相应的界面;

C层为控制层,两个用途:1处理和界面无关的代码逻辑;2接受和处理网络数据;

继续……

按照自己的经验,游戏中的mvc架构有两种思想,1,以mvc架构为主,整个框架就是一个mvc架构;2,以对象思想为主,对象中使用mvc架构,整个框架使用一个平行结构。先看看使用mvc架构的方式,如下图:

各个模块分为mvc三部分,有些模块可能只有其中一部分,比如只有view,只有model等。不同模块的mvc三部分对于其他模块也是可见的,比如bagview可以访问rolectrl,也许不需要访问,这里只是举例说明,rolectrl对于bagview是可见的。

整个框架的运行流程如下:

A 玩家在界面上操作的情况:

1 玩家的输入在view层处理,比如玩家在包裹面板上使用了一个道具,此道具的作用是给玩家一个buf,操作由bagview处理;

2 bagview将使用道具的操作转换为和界面无关的操作,发送给bagctrl,比如将界面上该道具的位置转换为包裹中的索引位置;

3 bagctrl在收到请求后将操作组装成请求包,通过networkIO发送给服务器;

此时,操作的前半部分就已经结束,操作带来的影响需要服务器处理

4 服务器返回操作结果,比如此时返回了两个协议,通过NetworkIO中对包的协议分析,分别发送给bagctrl处理和rolectrl处理;

5 bagctrl根据包的内容,此处应该是包裹中扣除一个道具,调用bagmodel的方法,扣除指定的道具;

6 bagmodel将数据更新,并发送包裹更新的事件到事件管理器;

7 事件管理器将包裹更新事件广播出来;

8 bagview注册了包裹更新事件的监听,bagview在收到事件后判断是否需要更新界面显示,如果需要,则获取bagmodel的数据,根据数据更新界面;

包裹的处理就已经完成了

9 rolectrl根据包的内容,此处应该是玩家拥有了一个新的buf,调用rolemodel的方法,增加buf;

10 rolemodel将数据更新,并发送玩家信息更新的事件到事件管理器;

11 事件管理器将玩家信息更新事件广播出来;

12 roleview和headview都注册了玩家信息更新事件的监听,

13 roleview根据当前玩家状态决定是否需要更新玩家3d形象,如果需要,则获取rolemodel的数据,做相应更新,比如在头顶加一个特效等;

14 headview根据当前玩家状态决定是否需要更新玩家头像信息,如果需要,则获取rolemodel的数据,做相应更新,比如在面板上加一个buf的图标等;

B 处理网络包的情况,其实就是上面流程中从步骤4开始到最后。

整个流程中需要注意几点:

1 在接受玩家的操作之后,如果没有特殊需求,view不能直接更改显示,显示的更改都要根据model发出的事件来触发;否则,在多个条件影响同一个view时,会出现错误;

2 view不能直接修改model的数据,只能读取,model的修改只能由ctrl来做;否则整个框架在游戏规模变大之后会变得相当混乱;

3model的作用只能是修改自身数据,并且发送事情出来,不能有其他操作;

由于完全开发各个模块各个层之间的可见关系,会将整个框架变为一个很复杂的网状结构,给拆分和扩展带来很大的麻烦,所以在可见性上做以下限制:

1 model层不能调用任何其他模块方法,只能调用事件管理器方法发送事件;

2 control层只能调用自己模块的model层方法;也就是说control层不能修改其他模块model层的数据;如果一个control必须要更改另外一个model的数据,可以通过调用另外一个control的方法来间接修改;

3 control层之间可以相互调用;因为处理网络IO的包时不管怎么样都需要在一个地方处理各个模块之间的交互,所以可以放在control层;

4 view可以调用其他模块的control层,但是不能view调用其他view,如果出现这种情况,一般都是设计不当造成的;

整个框架的调用关系就如下所示:

先写到这里……

时间: 2024-10-06 04:31:44

【转载】u3d游戏客户端架构(---)的相关文章

手机游戏客户端架构设计

第一部分.模仿MVC模式.状态机制第二部分. UI设计(完成UI库设计,UI编辑器未完成)第三部分.动画(人物动画未完成,普通动画完成--工具CocosBuilder)第四部分.资源利用设计(ui资源.动画资源.精灵资源)第五部分.技能设计(本地计算)第六部分.战斗系统设计(回合制思路,移植世界OL战斗系统)第七部分.换装系统(思路.Demo设计完成)第八部分.任务系统设计第九部分.地图设计(完成设计,工具Tiled)第十部分.网络层设计(完成设计)第十一部分.消息中心设计(完成设计)第十二部分

MMORGP大型游戏设计与开发(客户端架构 part1 of vegine)

重写有些核心接口的时候,其实遇到了许多的问题,甚至一度的想过要放弃,但是最终还是坚持了下来.在客户端提供的这些接口中,可以清晰的看到客户端所依赖的各种模块的支持,以及各自之间的一些关联.下面只是介绍了vengine(微引擎)接口的基础模块框架,所谓的接口即对象设计中常见的Interface,为一个框架提供了清晰的规范支持. VEGINE FRAMEWORK 功能实现 该接口已全部实现,具体的实例只需要继承接口封装即可.上图只为简单的模块介绍,其实每个接口都有每个接口其特别的用处,这一点会在接下的

U3D 游戏引擎之游戏架构脚本该如何来写

这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏引擎的朋友学会如何更好的写游戏脚本,当然本文这紧紧是我这么多年对游戏开发的认知,你也可以有你自己的看法.首先我们看看游戏主要是由哪几部分组成的,如下图所示,任何平台下的任何游戏核心都是由:数据.逻辑.渲染三大部分组成. 当你写过>=2个平台下的游戏时你会发现其实游戏开发很“容易”,为什么“容易”呢?因

MMORGP大型游戏设计与开发(客户端架构)

首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的ogre+cegui最新的版本作为开发,这方面原因是新的版本资料实在不多,对于没有什么经验的人来说实在是一大难事,所以最终选择了同天龙八部/武侠世界版本接近的源码作为开发.好了,废话不多说,今天好介绍的是客户端的基本构架,天龙八部/武侠世界的设计模式. CLIENT 功能实现 本次功能实现了vengi

MMORGP大型游戏设计与开发(客户端架构 part14 of vegine)

渲染在客户端中具有着至关重要的地位,试想我们玩游戏的第一感觉是什么就会明白了,良好的画面效果对客户端来说是多么的迫切.没有学习过opengl或是direct3d这些渲染API的朋友们也不必担心,而学习过这些接口的朋友们现在可以安心了,没有必要为了一个小小的渲染弄的头疼.因为渲染引擎可以帮你解决大部分你所能想到的渲染效果,这也正是渲染引擎所诞生的直接原因,那就是为了便利. CODE /** * PAP Engine ( -- ) * $Id system.h * @link-- for the c

MMORGP大型游戏设计与开发(客户端架构 part6 of vegine)

客户端的变量模块部分主要是将一些常用可变的值集中管理,如窗口的大小,是否开启音乐,音量的大小等等.这些变量通常会应该到客户端的操作,一般来说变量改变的时候会调用一个回调进行处理.下面我们就看看该模块的常用方法吧. CODE 文件system.h /** * PAP Engine ( -- ) * $Id system.h * @link -- for the canonical source repository * @copyright Copyright (c) 2013-2014 viti

MMORGP大型游戏设计与开发(客户端架构 part4 of vegine)

昨天是七夕,祝大家都过的快乐,希望这句迟到的问候不会造成大家心中的困扰.这一节讲到了前端比较重要的模块,性能以及调试异常模块.一个应用的性能往往是最核心的部分,就像人身体的各个器官一样,一小部分也不能马虎,否则你得到的只是你想象不到的苦果.在这里,我们封装了性能采集,调试输出.变量打印,以及异常收集.希望大家会对这方面有所了解与进步. 结构 CODE ax模块,文件profile.h /** * PAP Engine ( -- ) * $Id profile.h * @link -- for t

MMORGP大型游戏设计与开发(客户端架构 part11 of vegine)

从早年的无声电影到现在的逼真3D大片,人类在科技上可谓是一再突破.不知道有没有人经历过那无声的日子,没有声音的世界,咱们的耳朵也就失去了它本有的用途了.在游戏世界中,声音元素成了必不可少的一部分,一个没有声音的游戏现在可谓是太少见了,而且存活下来的希望自然不高.当前在游戏中,特别是3D游戏中,声音分为3D音效和平面音效.3D音效中主要是指环境音效,比如说某个地方的流水发出的声音,某片树林里充满的鸟叫声.平面音效即咱们感官的普通音效,背景音乐,自身的技能.UI声音. CODE 模块sound 文件

MMORGP大型游戏设计与开发(客户端架构 part7 of vegine)

我在讲述某个东西的时候总喜欢从简单的入手,然后从互相关联的地方联合讲解,因为时间关系所以没能讲的十分详细,这点引以为憾,希望得到大家的谅解.这一节讲述的是微引擎(vengine)比较简单的一个模块,那便是鼠标指针的模块,方法也提供的不多,相信大多数熟悉VC的朋友们已经掌握了这方面的知识,我也就不在此班门弄虎了. CODE 文件system.h /** * PAP Engine ( -- ) * $Id system.h * @link -- for the canonical source re