面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式
一般C/S模式都面临一个问题:
就是开发过程中的调试难题,由于涉及到client和服务端相关方法,假设由某个人来编写那么也是一个简单的事情.
假设由2个人编写,会带来一些平台上的差别以及编码的差别.
简单的说,假设我们在开发时全然的避开C/S,然后经由某个机制,能够直接让模块跑到server上,那么这将让你的开发速度上升好几个倍率.
没有协议,没有交互,没有网络,那么从头写到尾,也是一件比較简单的事情了,无需专门的服务端主程了(貌似哥们要失业了....><...).
首先来说一下,结合差异化网络数据交互方式的开发模式,比較绕口.
从模式上说,传统的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开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏
标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/a ...
- 9、Cocos2dx 3.0游戏开发三查找值小工厂方法模式和对象
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个 ...
- 9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个 ...
- 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...
- Phaserjs3 对象池随机产生炸弹并销毁 -- Html网页游戏开发
scene.js /// <reference path="../../libs/phaser/phaser.min.js"/> 'use strict'; var B ...
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- 面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式
上一页本文描述描述有关数据的发展过程之间的差异支撑点,这里展示的另一个特点:无缝切换的发展,以独立C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服务端相 ...
- scapy基础-网络数据包结构
网络层次模型,数据包的组成是学习scapy的基础,下文主要关注模型中各个层次的用途,ethernet II和ip包数据结构. 1.五层模型简介 名称 作用 包含协议 应用层 面向程序对程序的传输 ...
- 推动FPGA发展箭在弦上,国内厂商须走差异化之路
7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...
随机推荐
- Android之 内容提供器(2)——创建自己的内容提供器将数据共享出去
创建自己的内容提供器非常简单,只需要新建一个类继承ContentProvider类,通过实现ContentProvider的增删改查的方法向内容提供器中增删数据. 1 ContentProvider简 ...
- DP 题集 1
关于 DP 的一些题目 参考资料 [Tutorial] Non-trivial DP Tricks and Techniques DP Rain and Umbrellas Mr. Kitayuta, ...
- TCP/IP——IP网络协议简记
IP提供不可靠.无连接的数据报传送服务 不可靠:不保证IP数据报能成功到达目的地,当发生错误时,IP的做法是丢弃这个数据报,然后发送ICMP消息报给信息源. 无连接:IP不维护任何关于后续数据报的状态 ...
- 加密url
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 可以采用 https 证书 双向 加密验证. 加密到 JNI 里面,还是可以通过抓包工具 ...
- [Codeforces #201] Tutorial
Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> ...
- hdu 4790 Just Random
思路:对于a<=x<=b,c<=y<=d,满足条件的结果为ans=f(b,d)-f(b,c-1)-f(a-1,d)+f(a-1,c-1). 而函数f(a,b)是计算0<= ...
- Spring Mvc 前台数据的获取、SpringMvc 表单数据的获取
首先在web.xml 里面配置一个编码过滤器 <!-- springmvc框架本身没有处理请求编码,我们自己配置一个请求编码过滤器 --> <filter> <filte ...
- org.apache.curator:master选举和分布式锁
1. master选举(LeaderSelector) 1)LeaderSelector构造函数 在leaderPath上建立分布式锁:mutex = new InterProcessMutex(cl ...
- ZOJ 3256 Tour in the Castle 插头DP 矩阵乘法
题解 这题是一道非常好的插头题,与一般的按格转移的题目不同,由于m很大,要矩阵乘法,这题需要你做一个按列转移的插头DP. 按列转移多少与按格转移不同,但大体上还是基于连通性进行转移.每一列只有右插头是 ...
- [转]Android Service完全解析,关于服务你所需知道的一切
目录(?)[+] Android Service完全解析,关于服务你所需知道的一切(上) 分类: Android疑难解析2013-10-31 08:10 6451人阅读 评论(39) 收藏 举报 ...