【转载】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,如果出现这种情况,一般都是设计不当造成的;
整个框架的调用关系就如下所示:

先写到这里……
【转载】u3d游戏客户端架构(---)的更多相关文章
- 泡泡堂、QQ堂游戏通信架构分析
		
http://blog.csdn.net/sodme/article/details/468327#comments ————————————————————————————————————————— ...
 - U3D游戏开发商思考
		
代码驱动带来的技术题 游戏碎片化.U3D 引擎有个非常有力的特色,就是实时编译执行.这意味着不管在不论什么时候,仅仅要按下执行图标,当前的场景就会进入可执行状态. 这导致了游戏在开发的过程中常常陷入一 ...
 - 微信Android客户端架构演进之路
		
这是一个典型的Android应用在从小到大的成长过程中的“踩坑”与“填坑”的历史.互联网的变化速度如此之快,1年的时间里,可以发生翻天覆地的变化.今天在这里,重新和大家回顾微信客户端架构的演进过程,以 ...
 - 转:微信Android客户端架构演进之路
		
转自: http://www.infoq.com/cn/articles/wechat-android-app-architecture 微信Android客户端架构演进之路 作者 赵原 发布于 20 ...
 - 精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路
		
「架构都是演变出来的,没有最好的架构,只有最合适的架构!」最近,滴滴出行平台产品中心 iOS 技术负责人李贤辉接受了 infoQ 的采访,阐述了滴滴的 iOS 客户端架构模式与演变过程.李贤辉也是移动 ...
 - 支付宝客户端架构解析:Android 容器化框架初探
		
摘要: 本文将介绍支付宝 Android 容器化框架设计的基本思路. 1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”.“网络优化”.“性能启动优化 ...
 - 《Unity 3D游戏客户端基础框架》概述
		
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...
 - 游戏引擎架构 (Jason Gregory 著)
		
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
 - helios架构详解(二)客户端架构和cluster
		
helios的客户端架构和服务器端类似,只有部分类有所区别(黄色的),下图是客户端的架构 可以看出实际上只有IConnection的俩个实例(TcpConnection.UdpConnection)是 ...
 
随机推荐
- Perl语言入门--4--函数
			
1.chop函数:删除标量变量或数组中每个字符的最后一个字 举个栗子: #!/usr/bin/perl $v = 'Flowers'; $r = chop($v); print "$v (w ...
 - Ajax && json(原始)
			
function findSend() { $.ajax({ // async: false, // cache: true, type: "POST", url: "I ...
 - mongDB的常用操作总结
			
目录 常用查询: 查询一条数据 查询子元素集合:image.id gte: 大于等于,lte小于等于... 查询字段不存在的数据not 查询数量: 常用更新 更新第一条数据的一个字段: 更新一条数据的 ...
 - Android-一张图理解MVP的用法
			
M和V通过P交互,M做了两件事,开启子线程做耗时操作,然后使用原生的Hander方式切回主线程回调结果给P. M做的两件事也可以使用比较流行的rxjava实现: 备注:图片不清晰可以看这里
 - Eclipse FindBugs的安装
			
原文:http://blog.sina.com.cn/s/blog_62186b460100l3mx.html 1安装:首先到官方网站下载最新版本FindBugs http://findbugs ...
 - [Tools] Region commands to collapse the code by group
			
For a file which contians lots of lines of code, we can use 'comments region' to collapse the code. ...
 - iphone 消息推送 实现
			
IPhone 消息推送实现 参考 资料 http://blog.csdn.net/victormokai/article/details/39501277 对生成pem 的补充 拿到mac 上生成导出 ...
 - vue2.0  常用的 UI 库
			
1.mint-ui 安装: npm install mint-ui --save 使用: main.js // MintUI组件库 import MintUI from 'mint-ui' impor ...
 - 利用卷积神经网络(CNN)构造社区问答系统
			
/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 ...
 - iOS多线程编程(四)------ GCD(Grand Central Dispatch)
			
一.简单介绍 是基于C语言开发的一套多线程开发机制.也是眼下苹果官方推荐的多线程开发方法.用起来也最简单.仅仅是它基于C语言开发,并不像NSOperation是面向对象的开发.而是全然面向过程的.假设 ...