面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇這里描述了一個(gè)關(guān)于差異數(shù)據(jù)在開(kāi)發(fā)過(guò)程中的一個(gè)優(yōu)點(diǎn),這里來(lái)演示另外一個(gè)特點(diǎn):單機(jī)開(kāi)發(fā)之無(wú)縫切換到C/S模式
一般C/S模式都面臨一個(gè)問(wèn)題:
就是開(kāi)發(fā)過(guò)程中的調(diào)試難題,因?yàn)樯婕暗娇蛻?hù)端和服務(wù)端相關(guān)方法,如果由某個(gè)人來(lái)編寫(xiě)那么也是一個(gè)簡(jiǎn)單的事情.
如果由2個(gè)人編寫(xiě),會(huì)帶來(lái)一些平臺(tái)上的區(qū)別以及編碼的區(qū)別.
簡(jiǎn)單的說(shuō),如果我們?cè)陂_(kāi)發(fā)時(shí)完全的避開(kāi)C/S,然后經(jīng)由某個(gè)機(jī)制,可以直接讓模塊跑到服務(wù)器上,那么這將讓你的開(kāi)發(fā)速度上升好幾個(gè)倍率.
沒(méi)有協(xié)議,沒(méi)有交互,沒(méi)有網(wǎng)絡(luò),那么從頭寫(xiě)到尾,也是一件比較簡(jiǎn)單的事情了,無(wú)需專(zhuān)門(mén)的服務(wù)端主程了(貌似哥們要失業(yè)了....><...).
首先來(lái)說(shuō)一下,結(jié)合差異化網(wǎng)絡(luò)數(shù)據(jù)交互方式的開(kāi)發(fā)模式,比較繞口.
從模式上說(shuō),傳統(tǒng)的MVC模式比較類(lèi)似.
1.Model層,定義并描述了整個(gè)場(chǎng)景,細(xì)化到每一個(gè)數(shù)據(jù)對(duì)象,HP,MP之類(lèi)
2.View(UI)層,
2.1把對(duì)應(yīng)的數(shù)據(jù)綁定到UI上某個(gè)顯示元素,當(dāng)這個(gè)數(shù)據(jù)修改的時(shí)候,刷新UI上的數(shù)據(jù).?
2.2當(dāng)用戶(hù)激活某個(gè)控件,發(fā)出一條命令,并且當(dāng)命令響應(yīng)后,執(zhí)行對(duì)應(yīng)的回調(diào)方法
3.Control層, 對(duì)應(yīng)應(yīng)用層的邏輯,比如修改了某個(gè)數(shù)值
這就是本地單機(jī)開(kāi)發(fā)的模式,然后就是本文的重點(diǎn)了,如何把單機(jī)模式切換到C/S模式.
參考之前的文章,假設(shè)了2個(gè)Model之間的同步問(wèn)題,
那么把M/C 2層拷貝到服務(wù)端,然后通過(guò)同步協(xié)議同步本地的Model和遠(yuǎn)程的Model,就切換成功了.
來(lái)看下遠(yuǎn)程流程:
UI->本地Model->發(fā)出命令,等待回調(diào)->發(fā)送到遠(yuǎn)程->遠(yuǎn)程執(zhí)行命令->修改遠(yuǎn)程Model->獲得返回值和差異數(shù)據(jù)->
->本地Model 通過(guò)返回值和差異數(shù)據(jù) 同步->激活UI修改事件,修改綁定UI元素->執(zhí)行回調(diào)
單機(jī)開(kāi)發(fā)流程:
UI->本地Model->發(fā)出命令,等待回調(diào)->執(zhí)行命令->修改Model->激活UI修改事件,修改綁定UI元素->執(zhí)行回調(diào)
僅僅在執(zhí)行之前和回調(diào)進(jìn)行一層簡(jiǎn)單的橋接,那么即可切換到C/S模式.
這邊貼上一個(gè)示例,關(guān)于代理層和實(shí)際控制層的區(qū)別
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>/// 實(shí)際控制類(lèi)/// </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>/// 代理類(lèi)/// </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);}}總結(jié)
以上是生活随笔為你收集整理的面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。