面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描述了一个关于差异数据在开发过程中的一个优点,这里来演示另外一个特点:单机开发之无缝切换到C/S模式
一般C/S模式都面临一个问题:
就是开发过程中的调试难题,因为涉及到客户端和服务端相关方法,如果由某个人来编写那么也是一个简单的事情.
如果由2个人编写,会带来一些平台上的区别以及编码的区别.
简单的说,如果我们在开发时完全的避开C/S,然后经由某个机制,可以直接让模块跑到服务器上,那么这将让你的开发速度上升好几个倍率.
没有协议,没有交互,没有网络,那么从头写到尾,也是一件比较简单的事情了,无需专门的服务端主程了(貌似哥们要失业了....><...).
首先来说一下,结合差异化网络数据交互方式的开发模式,比较绕口.
从模式上说,传统的MVC模式比较类似.
1.Model层,定义并描述了整个场景,细化到每一个数据对象,HP,MP之类
2.View(UI)层,
2.1把对应的数据绑定到UI上某个显示元素,当这个数据修改的时候,刷新UI上的数据.
2.2当用户激活某个控件,发出一条命令,并且当命令响应后,执行对应的回调方法
3.Control层, 对应应用层的逻辑,比如修改了某个数值
这就是本地单机开发的模式,然后就是本文的重点了,如何把单机模式切换到C/S模式.
参考之前的文章,假设了2个Model之间的同步问题,
那么把M/C 2层拷贝到服务端,然后通过同步协议同步本地的Model和远程的Model,就切换成功了.
来看下远程流程:
UI->本地Model->发出命令,等待回调->发送到远程->远程执行命令->修改远程Model->获得返回值和差异数据->
->本地Model 通过返回值和差异数据 同步->激活UI修改事件,修改绑定UI元素->执行回调
单机开发流程:
UI->本地Model->发出命令,等待回调->执行命令->修改Model->激活UI修改事件,修改绑定UI元素->执行回调
仅仅在执行之前和回调进行一层简单的桥接,那么即可切换到C/S模式.
这边贴上一个示例,关于代理层和实际控制层的区别
public class Model : System.ComponentModel.INotifyPropertyChanged{private string _name = null;private int _count = 0;public string Name{get { return _name; }set{if (_name != value){_name = value;OnPropertyChanged("Name");}}}public int Count{get { return _count; }set{if (_count != value){_count = value;OnPropertyChanged("Count");}}}public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string name){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(name));}}}/// <summary>/// 实际控制类/// </summary>public class ModelControl : Model{public virtual void ChangeName(string name, Action callback){this.Name = name;if (callback != null){callback();}}public virtual void ChangeCount(int count, Action callback){this.Count = count;if (callback != null){callback();}}}/// <summary>/// 代理类/// </summary>public class RemoteModelControl : Model{public void ChangeCount(int count, Action callback){RemoteCall.BuildRequest(callback, "ChangeCount", count,null);}public void ChangeName(string name, Action callback){RemoteCall.BuildRequest(callback, "ChangeName", name, null);}}
面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式相关推荐
- 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据
主题 场景切换 场景间数据传递方式 小游戏全局背景音效 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的 ...
- js json对象转字符串_Mock.js模拟数据实现前端独立开发
在后端接口尚未完成时, 前端开发人员只能请求静态文件的方式来模拟数据, 非常繁琐, 使用mockjs, 我们可以对ajax请求进行拦截, 随机生成各种各样的数据, 包括图片, 非常方便, 由于实在肝不 ...
- android开发之网络棋牌类在线游戏开发心得(服务器端、Java)
转自:http://blog.csdn.net/bromon/article/details/253330 Bromon原创 请尊重版权 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整 ...
- android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏...
标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android (11) 转自:http://blog.csdn.net/bromon/ ...
- 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)...
http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...
- JAVA实现网络多线程编程小游戏开发
总结一下JAVA本学期的大作业. 实验总结:五子棋是一个很简单的游戏,但是如果认真对待,一个代码一个代码的去研究,会收获到很多知识,会打好学习基础.方便以后开发更高.更难的项目时打下稳固的基础.在自己 ...
- 5G差异化业务场景需求及网络切片(1)
文章目录 前言 一.5G网络切片在国内外研究情况 二.为什么需要网络切片? 2.1 不同场景对差异化业务的挑战 2.2 技术的驱动 三.什么是网络切片 3.1网络切片的特征 3.2网络切片的价值 四. ...
- 元宇宙之NFT行业分析:中国数字藏品行业有望走向规范化、差异化
潜力博主推荐,点上面关注博主↑↑↑ 一.中国数字藏品行业生态演进:合规化,差异化 (一)中办国办定调鼓励文化数字创新业务,行业形成自律规范 数字藏品作为新兴产业,在我国尚未搭建由上至下完善的监管机制 ...
- iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
最新文章
- apache2.2.21 + php5.3.8 + mysql5.5配置
- 如何正确的使用单例模式
- 信息系统项目管理师-信息系统项目管理基础核心知识点思维脑图
- scala为什么需要函数
- 英雄联盟更新后服务器还在维护吗,英雄联盟今天维护到什么时候结束 11月12日停机更新维护公告...
- 音视频技术开发周刊 | 157
- Source Insight 4.0 最简单的破解安装
- Java:关于main方法的10道面试题
- Advanced C++ --- const function
- vue.js 入门,简介
- 输入文字自动生成图片_原来Word还可以自动生成图片和图表目录!
- matlab中LMI工具箱函数feasp的用法
- KendoUI和wijmoUI 它们的Grid比较 20120423
- 同时开多个独立窗口Visio 2003/2007版本的软件
- 信息系统项目管理师项目合同管理
- 软件测试设计之——场景设计法,判定表法
- 嘉兴 机器人仓库 菜鸟_菜鸟在嘉兴推出全新智能仓 在“双11”启用超级机器人仓群...
- Shell脚本——条件语句
- Linux GIC代码分析
- Java大作业之餐厅管理系统