面對對象之差異化的網路資料互動方式--單機遊戲開發之無縫切換到C/S模式

來源:互聯網
上載者:User

標籤:.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模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.