2011-01-18 43 views
5

我正在開發一款多人角色扮演遊戲,(不,它不是mmorpg。;)Smooth MultiPlayer機芯

我目前的設置是這樣的。

客戶端告訴服務器「我想向前移動」/「我想向後移動」,然後服務器更新您的實體,並通知所在地區的所有客戶端有關更改。服務器每隔20ms更新一次實體,每隔100ms向客戶端發送一次更新,這些更新包含位置,速度,旋轉等。

目前爲止還不錯,但我沒有任何資料可以平滑數據包之間的移動在客戶端,我必須說,我無法得到它的工作。我一直在閱讀預測,插值和死鎖,但對我來說這一切都很糟糕。

所以現在我只是做一些像「位置= Packet.Position」,這會導致一個非常口吃的運動。

所以,我想要的幫助是,我如何得到更流暢的運動?一直在看XNA預測樣本,但我無法做到。

謝謝// F

+0

你是否只需要讓玩家的動作更流暢呢?客戶是否知道玩家的當前速度? – ssmir 2011-01-18 22:42:37

+0

那麼,目前我只有球員,這是我最關心的問題。客戶端知道速度,它包含在服務器的狀態包中。其實我在IRC上得到了一個很好的答案,明天會試試,如果成功,我會分享。 – 2011-01-18 22:51:54

回答

3

我建議從another question的想法(見接受的答案)

在這裏,客戶端計算彷彿它不是一個網絡遊戲的本身的位置。客戶定期將其當前位置發送到服務器。如果客戶作弊或無法繼續向選定的方向移動,服務器只會將客戶的正確位置發送給客戶。

相同的算法在網上Ultima使用(至少,當我10年前打吧)

+0

它很有趣,你提到Ultima Online,它是我最喜歡的遊戲之一。 :)如果我發現我當前的實現問題,我會嘗試這個。但是,這個結果是否會導致玩家A和玩家B所看到的差異很大? – 2011-01-20 21:34:16

0

我運行鬼實體一起與我的主要的一個解決它。
重影每幀都會得到更新,但每當有數據包進入時,其值都會被設置爲數據包的值。

然後我逐漸調整真正的實體到鬼的地方。