幀同步和狀態同步(二)案例分析

轉自:http://www.gameres.com/489361.html

騰訊一下出了兩款MOBA游戲,全民超神,王者榮耀,玩了一下,效果不錯,就分析了一下它底層的一些技術,發現一個是采用的狀態同步,TCP協議,另一個是采用的幀同步,UDP協議。自從去年了解到即時游戲幀同步這門技術,我就一直關注使用這個技術的游戲,一直沒有發現,雖然我們自己的游戲也是采用的幀同步,畢竟還沒有上線,現在線上有幀同步的游戲,效果還挺好,有點小激動。所以就寫了這篇文章,分享出來大家一塊研究。

  先說一些題外話,感慨一下,沒興趣的直接略過。

  做了這么多年游戲了,深深知道一個游戲的成功需要多方面的因素,不僅需要人和,有的時候也需要天時地利,但作為一個游戲開發者而言能決定就是人和,而這也是游戲能成功的基礎,有一幫人能夠全身心的投入去開發一款游戲,不斷的打磨甚至調整方向,面對問題能夠及時反饋,不斷迭代,就像做一個互聯網產品一樣,在這個過程中團隊里的所有人都能夠互相信任,不厭其煩的對產品進行改動,每一次的信任來源不是為大家打雞血畫餅,而是實實在在的數據分析以及努力總結原因后的理性決策。如果以上能夠堅持的話,先不說創新,最起碼游戲可以做到某一品類的極致,我想在任何的市場環境下,只要這個品類還沒死,總有你的一席之地,在我看來很多游戲死了,很多原因是做的還不到位,向當年抄COC的游戲很多,最后缺沒有一款成功的,而截至到目前COC的利潤還在不斷上升,如果國內抄襲者真能做到COC的一樣的體驗,我想一定會有成功的。

  那又有人要說了,怎樣才能做的比別人還好呢,這個問題確實比較復雜,我感覺首先一定要有合適的人,什么是合適的人呢,從3個方面考察:責任心積極性、學習能力、能力,我把能力放在最后是因為如果前面兩個條件滿足的情況下,這個人一定會變得有能力,然后就是需要有個高的要求,目標就是精品,這個不是光說說就行了,從策劃設計,程序實現,美術都要向著最高的標準要求,要比市面上的都要優秀,絕對不會為了各種其他因素(時間點,實現復雜)有任何妥協。最后是需要有點耐心,合理安排計劃時間,高效率完成,其實這點事最難的,團隊里的人很多,游戲制作有的時候經常需要反復,經常就是初期很有激情,中期不斷磨滅,到了后期(尤其是項目遇到困難時候)就比較松懈了,如果是沒有耐心的人估計在一起繼續工作都是問題了,還怎么談之前的事情。團隊是需要打磨的,如果你有一支這樣的團隊,那真的要好好的珍惜。

  好了,這是我對于游戲開發的一些感慨,還是回歸正題吧,對于一個游戲來講,戰斗就是靈魂,如果戰斗做不到極致,其他方面做的再好也是徒勞,這幾年,也參與了很多游戲的開發,其中有很多游戲是從決策到死掉全程參與,深有感慨。從端游到頁游 從頁游再到手游 每一個新市場機會出現的時候,都是從閉著眼睛就能賺錢到大部分賺不到錢過度,對游戲的開發技術都要求也是越來越高,只不過每個市場到成熟的時間都被大大縮短了。對于戰斗來講很多都是策劃腦補的跟實際做出來的完全不是一回事,很多原因都是戰斗方案選型就是錯誤的。

  從程序角度來講,我把戰斗從兩個維度分類:

  1、從操作方式上分為回合操作、即時操作。

  2、從交互方式上分為 離線戰斗 聯網戰斗,這個地方需要說明一下,有些游戲雖然也能進攻別人,例如COC 但是因為戰斗的時候,另外一個人是不可以操作的,類似于這樣的戰斗也可以稱為離線戰斗。

  基本上所有的戰斗都是以上兩種方式在某種程度的組合而已,例如夢幻西游可以認為是聯網戰斗、回合操作類型。

  最近比較火的全民超神,王者榮耀,屬于 (聯網戰斗|離線戰斗)即時操作類型。

  最新網易出的功夫熊貓 屬于 (聯網戰斗|離線戰斗)即時操作類型,相對于dota類的全民超神、王者榮耀,他對延遲要求的更高了。

  如果在立項初期,項目計劃時候不確定游戲的操作類型,以及網絡要求,做得后期要想調整的話,改動是致命的,假設按照之前時空獵人的方式實現的純離線戰斗及時游戲,最多也只能做做離線PVP,如果想增加聯網PVP的功能的話,對于程序來講幾乎需要重寫戰斗。

  隨著移動游戲市場越來越成熟,對于戰斗的要求也在提高,原來做一款ARPG,只有單機玩法就足夠了,不需要開發實時PVP,但是現在市面上的ARPG不僅可以聯網PVP,甚至可以聯網組隊PVE了,所以我感覺如果現在再去做游戲的話,只是一個單機玩法,或者是離線PVP玩法已經遠遠不能滿足現代玩家的口味了。

  我認為現在戰斗系統需要滿足一下幾點。

  1、一定要有離線PVE玩法,或者離線PVP玩法,可以在讓玩家在網絡不好的時候消遣,節省流量。(全民超神、王者榮耀在5V5匹配時候都有一定幾率匹配到離線戰斗,這個時候是不耗流量的,其他人全是AI控制的)

  2、一定要有在線PVP,在線PVE,能夠讓玩家在網絡比較好的時候,實時競技。增加可玩性。

  3、戰斗中,盡最大程度節省玩家的流量,例如全民超神這款游戲,一場30分鐘的戰斗基本上要消耗掉20M的流量,而且此類游戲大部分是玩的聯網戰斗,基本上在非wifi情況下沒法玩。

  4、需要有戰斗回放機制,可以讓策劃設計離線玩法的時候更自由,例如COC,戰斗回放基本變成了它游戲的一部分。

  5、防作弊,如果有離線玩法的話,一定有機制對離線玩法的結果進行驗證,要不然等你游戲真火了,你就知道錯了。

  6、實現難度相對較低。

  對于聯網游戲來講,同步的方式主要分為兩種,狀態同步、幀同步。

  1、狀態同步:顧名思義,是指的將其他玩家的狀態行為同步的方式,一幫情況下AI邏輯,技能邏輯,戰斗計算都由服務器運算,只是將運算的結果同步給客戶端,客戶端只需要接受服務器傳過來的狀態變化,然后更新自己本地的動作狀態、Buff狀態,位置等就可以了,但是為了給玩家好的體驗,減少同步的數據量,客戶端也會做很多的本地運算,減少服務器同步的頻率以及數據量。

  2、 幀同步:RTS游戲常采用的一種同步技術 ,上一種狀態同步方式數據量會隨著需要同步的單位數量增長,對于RTS游戲來講動不動就是幾百個的單位可以被操作,如果這些都需要同步的話,數據量是不能被接受的,所以幀同步不同步狀態,只同步操作,每個客戶端接受到操作以后,通過運算可以達到一致的狀態(通過隨機種子保證所有客戶端隨機序列一致),這樣的情況下就算單位再多,他的同步量也不會隨之增加。

  下面我們從以上的5個方面對各自實現方式進行描述:
id="iframe_0.9020318946303958" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.gameres.com/data/attachment/forum/201602/29/1021578dxy22edkkaeeew5.jpg?_=5283265%22%20style=%22border:none;max-width:1569px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9020318946303958',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 1569px; height: 276px;">

  總結一下:

  1、對于回合制戰斗來講,其實選用哪種方式實現不是特別重要了,因為本身實現難度不是很高,采用狀態同步也能實現離線戰斗驗證。所以采用幀同步的必要性不是很大。

  2、對于單位比較多的RTS游戲一定是幀同步,對于COC來講,他雖然是離線游戲,但是他在一樣輸入的情況下是能得到一樣結果的,所以也可以認為他是用幀同步方式實現的戰斗系統。

  3、對于對操作要求比較高的,例如MOBA類游戲有碰撞(玩家、怪物可以互相卡位)、物理邏輯,純物理類即時可玩休閑游戲,幀同步實現起來比較順暢,(有開源的Dphysics 2D物理系統可用 它是Determisti的)。

  4、對于戰斗時大地圖MMORPG的,一個地圖內會有成千上百的玩家,不是小房間性質的游戲,只能使用狀態同步,只同步自己視野的狀態。? ??

  5、幀同步有個缺點,不能避免玩家采用作弊工具開圖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode279 完全平方數

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。 示例 1: 輸入: n 12 輸出: 3 解釋: 12 4 4 4. 示例 2: 輸入: n 13 輸出: 2 解釋: 13 4 9. 思路&#xf…

推薦系統(1)-概述

推薦系統概述1.數據部分2.模型部分2.1模型的組成2.2模型的訓練2.3模型評估《深度學習/推薦系統》讀書筆記推薦系統要處理的問題:對于用戶U(user),在特定的場景C(context),針對海量的“物品信息”,構建一個模型f(U,I,C)f(U,I,C)f(U…

(十七)深入淺出TCPIP之UDP打洞原理

專欄其他文章: 理論篇: (一)深入淺出TCPIP之理解TCP報文格式和交互流程 (二)深入淺出TCPIP之再識TCP,理解TCP三次握手(上) (三)深入淺出TCPIP之再識TCP,理解TCP四次揮手(上) (四)深入淺出TCPIP之TCP三次握手和四次揮手(下)的抓包分析 (五)深入淺出TCPIP之TCP流…

leetcode240. 搜索二維矩陣 II

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target。該矩陣具有以下特性: 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例: 現有矩陣 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6…

NAT原理

網絡地址轉換(NAT,Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術。下面介紹兩類不同方式實現的NAT:NAT(Network Address Translators):稱為基本的NAT在客戶機…

推薦系統(2)-協同過濾1-UserCF、ItemCF

協同過濾1.CF概述2.數據表示3.衡量相似度4.共現矩陣5.UserCF6.ItemCF7.UserCF 與ItemCF 應用場景、主要缺陷8.基于UserCF 電影推薦demo《深度學習/推薦系統》讀書筆記推薦系統的發展一日千里 傳統的推薦模型(2010年前后):協同過濾、羅輯回歸、因子分解、梯度提升樹 …

sql查詢實例1(學生表_課程表_成績表_教師表)

表架構 Student(S#,Sname,Sage,Ssex) 學生表 Course(C#,Cname,T#) 課程表 SC(S#,C#,score) 成績表 Teacher(T#,Tname) 教師表 建表語句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8) ) CREATE TABLE course ( c# INT, cname…

android 存儲方式以及路徑簡介

存儲分成了內部存儲和外部存儲。注意內部存儲又叫做機身內存,而且內存又包含了兩個部分RAM(運行時內存,這個和運行速度有關系,是手機運行時存儲數據和指令的地方)、ROM(這個才算是真正存儲東西的內部存儲范圍,是應用配置和其他數據的地方);而外部存儲就很明確了,用戶的外部掛…

MachineLearning(11)-關聯規則分析

關聯規則分析1.簡單來說-關聯規則2.經典關聯規則挖掘-Apriori1.簡單來說-關聯規則 關聯規則–通過量化的數字描述物品甲的出現 對 物品乙的出現 有多大影響。 最早是為了發現超市銷售數據庫中不同的商品之間的關聯關系:哪組商品可能會在一次購物中同時購買。 廣泛…

APK 安卓反編譯

在學習Android開發的過程你,你往往會去借鑒別人的應用是怎么開發的,那些漂亮的動畫和精致的布局可能會讓你愛不釋手,作為一個開發者,你可能會很想知道這些效果界面是怎么去實現的,這時,你便可以對改應用的A…

sql查詢實例2(借書卡、圖書、借書記錄)

問題描述: 本題用到下面三個關系表: CARD 借書卡。 CNO 卡號,NAME 姓名,CLASS 班級 BOOKS 圖書。 BNO 書號,BNAME 書名,AUTHOR 作者,PRICE 單價,QUANTITY 庫存冊數 BORROW 借書記錄。 CNO 借…

開始學習Unity3D(一)

本人最近轉行開始做海外獨立游戲的發行,主要是負責服務器,開會注意到海外的服務越來越豐富越來越細分,對國內將會造成很大的沖擊,比如AWS,Google,GameSparks等,這導致國內的所謂服務器開發將越來越簡單,國內對服務器開發的需求越來越少,反而客戶端的需求越來越多,所以…

List 流的使用

摘要 本文將介紹在 Java 1.8 中對 List 進行流操作的使用方法。引入的 java.util.stream 包為開發者提供了一種更為便捷和強大的方式來處理集合數據。通過使用流,我們能夠以聲明性的方式進行集合操作,減少了樣板代碼,提高了代碼的可讀性和可…

推薦系統(3)-協同過濾2-矩陣分解算法

協同過濾-矩陣分解算法1.奇異值分解2.梯度下降3.矩陣分解方法的優缺點《深度學習/推薦系統》讀書筆記(其實矩陣分解和協同過濾已經沒有特別大的聯系了) 2006年,在Netfilx舉辦的推薦算法競賽中Netflix Prize Challenge中,以矩陣分解…

leetcode141 環形鏈表

給定一個鏈表,判斷鏈表中是否有環。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 示例 1: 輸入:head …

iPhoneX適配

目錄(?)[-]核心代碼自動化修改代碼參考資料iPhoneX適配,比較搓的一種方式,在不修改分辨率(720 x 1280)的情況下適配iphone X 主屏尺寸: 5.8英寸 主屏分辨率: 2436 x 1125核心代碼修改 工程目錄/Classes/Un…

centos安裝nginx,配置負載均衡

1、安裝nginx安裝教程,參照:http://mp.weixin.qq.com/s/RVaRlRpHqZRjCaXGmOlfKw 2、反向代理的配置修改部署目錄下conf子目錄的nginx.conf文件的內容[html]view plaincopylocation / { #設置主機頭和客戶端真實地…

leetcode142 環形鏈表II

給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有…

PaperNotes(18)-VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized Representation

自動駕駛論文閱讀筆記11. Ployline Garph2. Global Graph3. 模型目標函數4.Related work5.Experiment5.1 實驗設置5.2 消融實驗5.3 模型資源消耗5.4 與其他模型的對比實驗VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized RepresentationVectorNet: 通過矢量化…

ubuntu的apache配置https

一、配置Apache 1、開啟SSL模塊a2enmod ssl 2、啟用SSL站點a2ensite default-ssl 3、加入監聽端口vi /etc/apache2/ports.conf #編輯Apache端口配置,加入443端口 Listen 443注:Ubuntu啟用SSL站點后,缺省已經加入了 (…