因為制作的是一個簡易版的。
所以很多的同步,全部依賴于客戶端自己來完成。
我們有哪些東西是由客戶端自己來實現的同步呢?
魚位置同步。
這個問題,我們處理了很多版本。
第一種是以服務器記錄每條魚已存活多久的時間為記錄,然后客戶端以這個記錄時間來算出當前魚所處的坐標位置index。
但是這種方式在客戶端出現一些卡幀的情況后,就會導致蝴蝶效應,后續的偏差越來越大。
第二種 服務器記錄魚的產生時間,然后客戶端自己在每幀中計算魚的已存活時間,然后計算出當前魚所處的坐標index。
這種方式,就算是會出現卡幀,但是客戶端也會在后續的每幀刷新中同步矯正相應的位置。炮臺的角度同步。
正常情況下,我們在每次開炮時都將對于炮臺的角度,由服務器同步給了其他玩家。這個沒什么問題。
但是,在鎖定魚的情況下的角度同步,如果魚位置的同步沒什么問題,那么這個也不會有什么問題,
但是因為是由純客戶端進行的魚位置同步,那么就總是會出現一些無法意料的同步問題。所以當不同客戶端的魚位置不同時,
那么從炮臺到對應的鎖定的魚之間的角度就會出現偏差。而炮臺是同步的對應的炮臺的角度,但子彈的角度,卻是由鎖定魚位置和炮臺位置計算出來的角度。所以就會出現,炮臺角度朝向和子彈發射的角度朝向出現偏差。
那么,我的解決辦法是,當沒有鎖定的魚時,炮臺直接同步服務器下發的角度,如果有鎖定魚,那么炮臺角度,直接重新在客戶端本地計算出當前的炮臺角度和子彈角度。使自己的客戶端看起來是完全正常的。就算魚的位置不同步,也依然不會有問題。隨機小魚群的同步。
客戶端會出現一些同種魚走相同路線,但是位置又有一些偏差的小魚群。
小魚群的實現,是由客戶端自身計算出這一波魚里,其中的一部分魚能組成小魚群,然后計算出每條魚的位置偏移來實現魚群的效果。
而這個位置的偏移是由隨機數來實現的。那么我們想要在不同的客戶端上看到的小魚群是一樣的,就需要同步這個隨機種子。
我們以這個魚群的產生時間做為隨機種子,那么就算是在不同的客戶端,我們也依然能夠同步這個隨機種子,達到我們想要的隨機效果。