如果把網絡遊戲客戶端以經典的MVC模式看待,本地及網絡數據相當於M,一切玩家能接觸到的東西(比如渲染)相當於V,客戶端承擔的複雜度側重於構建一個簡潔靈活的框架,及一個穩定高效的C。移動應用一般都要掛到商店中供下載,而各個商店的版本更新流程頗耗時,網遊比單機會有更頻繁的版本更新,如何做到快速的自動更新是移動網遊特有的問題。
我們的遊戲客戶端基於cocos2d-x。它是一個需要精簡的地方做的冗餘,想替調用者操心很多東西卻沒有做恰當的很差的實現。對它的改進最好單獨寫一篇博客出來,這次就不敘述了。但不管怎樣,作爲開源庫,一個小的修訂版本號的變更引起多處接口的修改這一點行徑都是會引起報怨和諷刺的。
我的做法是C/C++只暴露底層接口給Lua,比如網絡消息收發、渲染對象控制、資源路徑管理等,不在native代碼中寫任何gameplay相關邏輯;所有gameplay我都認爲是易變的,都放在Lua代碼中實現。這樣就相當於M、V在native代碼中,C在Lua中。cocos2d-x自帶了Lua綁定,沿用並擴展比較容易。主循環等效率敏感的東西依然跑在native中,Lua腳本的執行時機主要有兩方面,一是某一時刻執行一次創建渲染對象,二是用戶操作或網絡事件驅動執行一段邏輯代碼,觸發式的功能放在腳本里在性能上完全沒問題。對於gameplay開發者來說,這套東西更像一種事件驅動的UI系統。腳本像其它資源一樣可自動更新而不走商店的流程,這再快捷不過了。
我只用C++寫了少量控件輔助類,所有控件的實現都直接用Lua來封裝。若以C++來封裝控件,最終仍然要綁定給Lua使用,除了額外的C++代碼,運行時還需要更多的時間和空間生成對應的Lua結構,這是得不償失的。如果不做動畫的話,佈局和回調就是UI系統的兩大功能,自適應分辨率又是佈局中非常重要的功能。我使用經典的絕對數據+停靠方式+縮放模式的形式實現可組合的靈活佈局。
對於需要大量活動對象的遊戲類型,也可沿用這套方案,甚至將邏輯對象數據結構都完全放到Lua腳本中。
資源路徑管理我使用了一種文件名即ID的方式,在全局索引時它不允許重名文件,後被遍歷到的文件信息會覆蓋先前的數據,而在(按子文件夾路徑命名組)分組索引時則沒有全局重名問題。這套實現可以做得很精簡。遊戲的資源會分成兩個文件夾,一個是隨初始安裝包裝好的默認資源,另一套是自動更新到一個可寫文件夾下的最新資源,資源路徑管理器每次會先遍歷默認資源再遍歷最新資源。如果程序安裝包將資源排除在外,流程上會更簡單一點。
主要的思路只有這些。還有些瑣碎的雜事就按需定製了,比如:http通信,遊戲狀態機,高效定時器,持久化,分級資源緩存,Lua require流程的hack,Lua加密,商店相關調用等。
移動網遊客戶端框架
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Django1_簡述及第一個項目搭建
易水寒月
2019-02-23 00:13:10
Django REST_framework框架 01
jedi911
2019-02-23 00:42:19
spring mvc 框架搭建及詳解
motouzhixin
2019-02-23 00:20:54
Android 最火的快速開發框架XUtils
大水牛牛
2019-02-23 00:18:19
在GitHub上目前比較火的15個Python框架!
Dawning666
2019-02-23 00:17:01
JEESZ分佈式框架安裝和使用
花的魚
2019-02-22 23:45:11
python學習隨筆--web框架
礪器悟道
2019-02-22 23:19:21
《信息科技管理制度體系框架》
chenliqni
2019-02-22 23:18:31
ssh整合中web.xml配置文件
我相信ICan
2019-02-22 23:08:50
用window.location.href實現刷新另個框架頁面
jianjzh
2019-02-22 22:33:05
Java 併發開發:Lock 框架詳解
kingZXY2009
2019-02-22 22:32:02
手把手教你跑Larave框架實戰筆記系列之二
人可工作室
2019-02-22 21:59:32
Python爬蟲框架【Scrapy】
流域哈哈
2019-02-22 21:50:06
CppCMS:C++的Web開發框架(轉於百度百科)
atixujie
2019-02-22 21:38:26
24小時熱門文章
-
再談23種設計模式(3):行爲型模式(學習筆記)
-
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
-
微前端學習筆記(4):從微前端到微模塊之EMP與hel-micro方案探索
-
微前端學習筆記(1):微前端總體架構概述,從微服務發微
-
985 碩士程序員,空窗 4 個月沒有 Offer!
-
一文搞懂 Spring 循環依賴
-
賽博鬥地主——使用大語言模型扮演Agent智能體玩牌類遊戲。
-
VScode右鍵打開(添加到右鍵)
-
記一次 .NET某工控視覺自動化系統 卡死分析
-
WindowsServer--SQL Server搭建主從同步實現讀寫分離 - 事務性分發