我正在製作一個基於磁貼的2D RPG(自上而下,32x32像素)。玩家可以使用箭頭鍵移動到任何相鄰的圖塊。我發現它有點難於理解插值。客戶端/服務器插值
我明白遊戲中的方向可以突然改變,像航位推算這樣的概念將毫無用處。
客戶端預測正常工作,但是,當我從服務器收到有關其他客戶端位置的不同語言的更新時,我很難理解這個概念。
例如,我的球員A.
目前,當玩家B移動,我收到他們的新位置,並從服務器的時間戳。在局域網連接上,這似乎按預期工作,並且玩家B立即在屏幕上移動,並進行正確的插值。我計算從服務器發送數據到接收數據的時間,並且每幀插入差值(16ms,60fps)。如果我有200ms的RTT,而玩家B有400ms的RTT,並且他們每250ms移動1個瓦片,我會在300ms後收到數據,所以我只能看到玩家B傳送到新的瓦片。
我是否必須將其延遲時間添加到時間戳中,因此當我收到它時,時間戳匹配和動畫順利啓動?
我在想這個嗎?
謝謝。
編輯:我忘了提及服務器每隔50ms發送一次更新。
謝謝MMc,我想我現在對此瞭解得更清楚了。該服務器具有發送玩家的位置在每個服務器更新,即使一直沒有其他輸入,所以我會永遠在客戶端的每個時步過去和當前位置?如果一個客戶端只在輸入處理完畢時才發送數據,那麼客戶端可能會在幾秒鐘內收不到任何服務器更新,無論如何,我可以適當插入嗎? – Max6701
如果你想推斷,你可以使用你從前一對數據點計算出的增量,但是你需要使用外推位置作爲當前數據,當你的服務器最終發送一個新的數據點時再次開始插值。如果使用來自服務器的前一位數據,那麼顯示的數據將是不連續的,因此使用外推法並減少隨時間推移引發的任何錯誤通常是更好的解決方案。 – MMc