面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
来源:互联网 发布:java配置文件路径 编辑:程序博客网 时间:2024/06/05 18:04
上一篇这里描述了一个关于差异数据在开发过程中的一个优点,这里来演示另外一个特点:单机开发之无缝切换到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模式
- 面对对象之差异化的网络数据交互方式
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- Android的API与差异化之路
- Unity Notes之配置文件基于内容的差异化更新
- 从单机到集群会话的管理之单机模式
- 刘惠斌:游戏视觉的差异化设计
- 不同游戏类型的差异化特性
- Object-c基础之三:面对对象开发@interface,@implementation
- 网站运营之比较和差异化
- jmeter之相对路径差异化处理
- 【iOS开发之Objective-C】对象的交互
- Android数据存储方式之:网络数据交互
- 《java入门第一季》之tcp协议下的网络编程c/s实现通信交互
- svn代码回滚命令
- JAVA保留两位小数(四舍五入)
- Remove Duplicates from Sorted List II
- 第十七周 【项目6-学生成绩统计】(5)
- 只有mdf文件和ldf文件,怎么恢复数据库
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
- 第17周项目2 引用做行参
- ncverilog使用
- 11 奇偶数分离
- 算法-全排列问题
- 分割字符串的AfxExtractSubString函数
- 沭阳通过省级生态园林城市初步验收
- oracle 10g standby database 实时应用 redo 数据
- 判断滚动条的滚动方向