毫無疑問,策劃都喜歡多人同屏戰鬥。什麼萬人大地圖,這確定是策劃的最愛了。但是對於遊戲來講,這並非什麼很是好的設計。即便解決了服務端計算的性能壓力,客戶端顯示的性能壓力。萬萬沒想到的是咱們遊戲在客戶端網絡帶寬上面遇到了壓力。網絡
假設1000人同屏,那麼要同時同步1000我的的位置,移動方向,速度,釋放技能,傷害,血量,buff等信息。這n^2的網絡帶寬複雜度,對於服務端來講,其實只要申請大些的帶寬,買貴點其實就能夠解決了。可是對於時常處於不穩定和低網速網絡環境(電梯、地鐵、偏遠山區等環境)下的手機,特別是還處於2g,3g的網絡環境下的手機,那麼小的帶寬承載能力其實根本沒法應付這麼大的網絡消息同步的。形成後果,遊戲會有明顯的收包卡頓,有些會出現好幾秒,出現很是很差的遊戲體驗。
另外,即便手機能夠承受,在當下手機網絡流量並無那麼廉價的狀況下,如此耗費網絡流量,很難的獲得玩家的承受。性能
以上,對於實時同步信息的模式,在大規模多人對戰手遊中,並非一種很是合適的方案。優化
問題在於客戶端的網絡帶寬,若是減小客戶端接收的網絡帶寬纔是重點。不去同步那麼多的信息,那麼就須要客戶端和服務端儘可能約定規則。使用客戶端先行,服務端演練計算的方式來實現。貌似業界已經有這種方案了,傳聞lol、dota2就是這麼實現的(這方便並沒進行查閱,只是有個印象)。
到戰鬥開始的時候,先同步必要的信息,譬如場景內的怪物、位置、AI、血量、技能等信息和一個隨機數。AI的行爲經過隨機觸發。那麼須要同步的信息就只剩下那些沒法肯定的因素。譬如玩家,何時釋放什麼技能、如何移動,咱們是沒法肯定的,但只要在外面服務端的演練中同步上,那麼一樣能夠演練出客戶端的整個戰鬥過程出來。
對比能夠發現,使用這種方法,咱們只須要同步玩家的技能、移動就能夠了。省去了不少其它能夠直接演練出來的信息。爲了不演練的誤差,能夠按期同步一些內容。這樣既能夠保證戰鬥的一致性,也大幅度減小了帶寬流量。設計
固然使用這種方式,對客戶端和服務端的約定要求很是高,相比也複雜了許多,對於研發人員的要求一樣要高許多。遊戲
不過業界已經有成型的方案,天然能夠解決。對比玩家體驗,這方面的優化仍是頗有必要的。同步