網路射擊遊戲的命中演算法是如何實現的?

比如穿越火線,比如CS-Online等

一個玩家每射出一發子彈,在判斷子彈是否命中敵人的演算法上,是在客戶端計算還是將子彈所在的直線數據發送到伺服器上由伺服器判斷?

在客戶端判斷可以大大減少伺服器的資源開銷,並能夠實現玩家看著打中了就是打中了,不會出現因為目標位置在客戶端與伺服器間不同步造成的遊戲體驗下降;但是出於數據安全性考慮,一旦客戶端與伺服器的數據加密演算法被破解,那麼就可以使用外掛軟體來偽裝客戶端向伺服器傳遞命中的數據包,嚴重影響遊戲的平衡性。

在伺服器端則與以上相反,雖然保證了數據安全,但是因為網路延遲的存在必然會出現玩家看到的敵人位置與實際位置不符導致玩家不論怎麼打都打不中的情況,而且會大大增加伺服器的開銷。

小弟對加密演算法不是很了解,若是客戶端計算的方式,如今的加密演算法是否可靠?使用外掛模擬偽裝的可能性有多少?


移動srv判斷,命中client判斷 + 校驗 .

你要模擬啥?模擬命中?

不用看FPS網遊,看看那些MMORPG,暴遠程交易的遊戲多了去了。。

DNF這樣的遊戲同樣如此,FPS出全圖秒殺、透視、、移動加速、甚至是無限子彈是很容易的事情.


我個人感覺CF和CSOnline都應該是server來計算命中的。

本來這類開房間式ACG遊戲,伺服器資源屬於非常次要的問題。

如果你說的放在server運算導致的體驗問題是指,玩家明明打出去子彈卻沒有看到效果,那問題很好辦。

拆解下攻擊的過程,命中其實分兩個部分:

1.子彈打到玩家身上

2.玩家掉血

子彈是否打到玩家身上,這點由client判斷即可。

也就是說,玩家在玩的時候,瞄準了再打,無論延遲如何,總能看到反饋。

然後client發送攻擊的請求,server校驗過後,才會向client廣播某玩家被攻擊的事件。


大多數是伺服器計算命中,客戶端做校政來優化體驗上的延遲問題


之前看過一個討論這方面的一個帖, 說到客戶端與服務端的一個交互, 服務端預算結果,然後通過客戶端傳遞的數據來檢驗,跑跑卡丁車裡面,網路不暢的時候,有時候顯示我們跑在前面,但是又突然一卡,在別人的後面了。傳奇也是一個典型,經常出現,跑啊跑,突然卡回來的情況。但CS這樣的實時性更高的,這樣似乎消耗就比較大了。 不知道用的什麼方法比較好了。


推薦閱讀:

黑科技系列——主W版彗星風女(一)
網遊層出的那個時代 有一段時間屬於它
忽如一夜春風來
全職高手中葉修的真實身份,家庭背景是什麼?
放棄免費網遊:全境封鎖(Tom Clancys the Division)

TAG:網路遊戲 | 演算法 | 編程 | 演算法實用性探討 | 射擊遊戲STG | 演算法設計 | 網遊客戶端 |