標籤:.net 單機遊戲 開發模式
上一篇這裡描述了一個關於差異資料在開發過程中的一個優點,這裡來示範另外一個特點:單機開發之無縫切換到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模式