1. 程式人生 > >u3d遊戲客戶端架構

u3d遊戲客戶端架構

主要是mvc架構,

M層為資料層,兩個用途:1儲存資料;2傳送資料更新資訊;

V層為檢視層,兩個用途:1接受使用者從介面上的操作;2根據M層的資料顯示相應的介面;

C層為控制層,兩個用途:1處理和介面無關的程式碼邏輯;2接受和處理網路資料;

繼續……

按照自己的經驗,遊戲中的mvc架構有兩種思想,1,以mvc架構為主,整個框架就是一個mvc架構;2,以物件思想為主,物件中使用mvc架構,整個框架使用一個平行結構。先看看使用mvc架構的方式,如下圖:

各個模組分為mvc三部分,有些模組可能只有其中一部分,比如只有view,只有model等。不同模組的mvc三部分對於其他模組也是可見的,比如bagview可以訪問rolectrl,也許不需要訪問,這裡只是舉例說明,rolectrl對於bagview是可見的。

整個框架的執行流程如下:

A 玩家在介面上操作的情況:

1 玩家的輸入在view層處理,比如玩家在包裹面板上使用了一個道具,此道具的作用是給玩家一個buf,操作由bagview處理;

2 bagview將使用道具的操作轉換為和介面無關的操作,傳送給bagctrl,比如將介面上該道具的位置轉換為包裹中的索引位置;

3 bagctrl在收到請求後將操作組裝成請求包,通過networkIO傳送給伺服器;

此時,操作的前半部分就已經結束,操作帶來的影響需要伺服器處理

4 伺服器返回操作結果,比如此時返回了兩個協議,通過NetworkIO中對包的協議分析,分別傳送給bagctrl處理和rolectrl處理;

5 bagctrl根據包的內容,此處應該是包裹中扣除一個道具,呼叫bagmodel的方法,扣除指定的道具;

6 bagmodel將資料更新,併發送包裹更新的事件到事件管理器;

7 事件管理器將包裹更新事件廣播出來;

8 bagview註冊了包裹更新事件的監聽,bagview在收到事件後判斷是否需要更新介面顯示,如果需要,則獲取bagmodel的資料,根據資料更新介面;

包裹的處理就已經完成了

9 rolectrl根據包的內容,此處應該是玩家擁有了一個新的buf,呼叫rolemodel的方法,增加buf;

10 rolemodel將資料更新,併發送玩家資訊更新的事件到事件管理器;

11 事件管理器將玩家資訊更新事件廣播出來;

12 roleview和headview都註冊了玩家資訊更新事件的監聽,

13 roleview根據當前玩家狀態決定是否需要更新玩家3d形象,如果需要,則獲取rolemodel的資料,做相應更新,比如在頭頂加一個特效等;

14 headview根據當前玩家狀態決定是否需要更新玩家頭像資訊,如果需要,則獲取rolemodel的資料,做相應更新,比如在面板上加一個buf的圖示等;

B 處理網路包的情況,其實就是上面流程中從步驟4開始到最後。

整個流程中需要注意幾點:

1 在接受玩家的操作之後,如果沒有特殊需求,view不能直接更改顯示,顯示的更改都要根據model發出的事件來觸發;否則,在多個條件影響同一個view時,會出現錯誤;

2 view不能直接修改model的資料,只能讀取,model的修改只能由ctrl來做;否則整個框架在遊戲規模變大之後會變得相當混亂;

3model的作用只能是修改自身資料,並且傳送事情出來,不能有其他操作;

由於完全開發各個模組各個層之間的可見關係,會將整個框架變為一個很複雜的網狀結構,給拆分和擴充套件帶來很大的麻煩,所以在可見性上做以下限制:

1 model層不能呼叫任何其他模組方法,只能呼叫事件管理器方法傳送事件;

2 control層只能呼叫自己模組的model層方法;也就是說control層不能修改其他模組model層的資料;如果一個control必須要更改另外一個model的資料,可以通過呼叫另外一個control的方法來間接修改;

3 control層之間可以相互呼叫;因為處理網路IO的包時不管怎麼樣都需要在一個地方處理各個模組之間的互動,所以可以放在control層;

4 view可以呼叫其他模組的control層,但是不能view呼叫其他view,如果出現這種情況,一般都是設計不當造成的;

整個框架的呼叫關係就如下所示:

相關推薦

u3d遊戲客戶架構

主要是mvc架構, M層為資料層,兩個用途:1儲存資料;2傳送資料更新資訊; V層為檢視層,兩個用途:1接受使用者從介面上的操作;2根據M層的資料顯示相應的介面; C層為控制層,兩個用途:1處理和介面無關的程式碼邏輯;2接受和處理網路資料; 繼續…… 按照自己的經驗,遊戲中

MMORGP大型遊戲設計與開發(客戶架構 part16 of vegine)

由於近來比較忙碌和有些睏倦的原因,所以關於這部分的文章沒有及時更新,一句話:讓朋友們久等了!今天所講的是客戶端vengine(微引擎)中最後一個部分,就像上節所說,這一部分的內容比較多。可能有些朋友看了程式碼以及註釋後,仍有不少疑惑的地方,歡迎評論留言相互討論,如

Zookeeper之Zookeeper底層客戶架構實現原理(轉載)

一次 描述 綁定 機制 一個 ini fin 源碼 receive Zookeeper的Client直接與用戶打交道,是我們使用Zookeeper的interface。了解ZK Client的結構和工作原理有利於我們合理的使用ZK,並能在使用中更早的發現問題。本文將在研究源

h5牛牛平臺搭建中小型棋牌類網絡遊戲服務架構

tin timer redis緩存 公眾平臺 客戶端 三種 參考 組件 初始 h5牛牛平臺搭建相關教程:http://h5.mostsheng.com 相關聯系方式:QQ1279829431電聯17061863554 用Golang實現基礎架構邏輯後,準備再次談談我的想法。

Lua用於遊戲運行期熱更(不重啟遊戲客戶

服務端 道理 IT path 客戶 內存 每次 調用 清除 lua在Unity的熱更新中,一般是每次客戶端啟動的時候檢查是否有更新,然後加載。 如果要在運行期熱更,跟服務端做不停服熱更(比如java 用類構造啟動java腳本本身,或者luaJ)是一個道理。

支付寶客戶架構解析:iOS 容器化框架初探

1. 前言 由本章節開始,我們將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將介紹支付寶 iOS 容器化

支付寶客戶架構解析:Android 客戶啟動速度優化之「垃圾回收」

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將介紹支付寶 Andro

支付寶客戶架構解析:iOS 客戶啟動效能優化初探

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 啟動應用是使用者使用任何一款

支付寶客戶架構分析:自動化日誌收集及分析

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將結合禾兮

基於滴滴雲的棋牌遊戲服務架構設計

現在小團隊開發的棋牌遊戲有很多,棋牌行業的相互攻擊是非常普遍的現象,同行之間往往會採取 DDOS、CC 等攻擊的手段來打擊對手,這是目前棋牌運營商們面臨的比較嚴峻的一個問題,那麼在設計棋牌遊戲服務端架構時就需要考慮高可用和抗攻擊這兩個特性,本文詳細介紹瞭如何基於滴滴雲現有的產品組合來設計一套

網狐棋牌遊戲服務架構設計原理

基本設計概念和處理流程 呼叫模型 模仿COM元件介面模式,利用面向物件思想多型性polymorphism,呼叫方儲存著被呼叫方的基礎介面指標(interface or sink鉤子)(Pure Virtual Function),呼叫方直接呼叫介面指標內宣告的純虛方法

遊戲客戶面試(Unity)

推薦閱讀:  我的CSDN  我的部落格園  QQ群:704621321 一。最開始的兩家公司筆試面試題目       

《Unity 3D遊戲客戶基礎框架》概述

框架概述: 做了那麼久的業務開發,也做了一年多的核心戰鬥開發,最近想著自己倒騰一套遊戲框架,當然暫不涉及核心玩法型別和戰鬥框架,核心戰鬥的設計要根據具體的遊戲型別而定製,這裡只是一些通用的基礎系統的框架搭建,其中包括: UI框架(NGUI + MVC) 訊

《Unity 3D遊戲客戶基礎框架》protobuf 導excel表格資料

前言:        之前使用NPOI外掛編寫的導表工具,其實就是直接將資料進行序列化,解析時還需要進行反序列化,步驟比較繁複,最近看到Google的一個開源的專案protobuf,不僅可以用於進行ex

經典遊戲伺服器架構概述 (1)

架構的分析模型 一. 討論的背景 現代電子遊戲,基本上都會使用一定的網路功能。從驗證正版,到多人互動等等,都需要架設一些專用的伺服器,以及編寫在伺服器上的程式。因此,遊戲伺服器端軟體的架構,本質上也是遊戲伺服器這個特定領域的軟體架構。 軟體架構的分析,可以通過不同的

遊戲服務架構介紹

型別1:卡牌、跑酷等弱互動服務端卡牌跑酷類因為互動弱,玩家和玩家之間不需要實時面對面PK,打一下對方的離線資料,計算下排行榜,買賣下道具即可,所以實現往往使用簡單的 HTTP伺服器:登入時可以使用非對稱加密(RSA, DH),伺服器根據客戶端uid,當前時間戳還有服務端私鑰

《Unity 3D遊戲客戶基礎框架》 protobuf網路框架

前言:        protobuf是google的一個開源專案,主要的用途是:1.資料儲存(序列化和反序列化),這個功能類似xml和json等;2.製作網路通訊協議;一、資源下載:二、資料儲存:        C#語言方式的導表和解析過程,在之前的篇章中已經有詳細的闡述:

《Unity 3D遊戲客戶基礎框架》訊息系統

功能分析: 首先,我們必須先明確一個訊息系統的核心功能: 一個通用的事件監聽器 管理各個業務監聽的事件型別(註冊和解綁事件監聽器) 全域性廣播事件 廣播事件所傳引數數量和資料型別都是可變的(數量可以是 0~3,資料型別是泛型) 設計思路: 清楚了

2018騰訊遊戲客戶實習-電話面試過程記錄

電話面試是昨天,結束之後稍微總結了一下,今天寫篇文章記錄過程和內容。 首先在前天下午的時候,突然收到了一封簡訊,內容開頭是: XXX:你好,我是騰訊技術面試官(深圳),請問明天下午或晚上。。(略) 我一看,我不是XXX啊,雖然投了簡歷,但是筆試都沒

《Unity 3D遊戲客戶基礎框架》多執行緒非同步 Socket 框架構建

引言: 之前寫過一個 demo 案例大致講解了 Socket 通訊的過程,並和自建的伺服器完成連線和簡單的資料通訊,詳細的內容可以檢視 Unity3D —— Socket通訊(C#)。但是在實際專案應用的過程中,這個 demo 的實現方式顯得異常簡陋,而且對應