+ -
当前位置:首页 → 问答吧 → 如何让各客户端保持同步呢?

如何让各客户端保持同步呢?

时间:2010-12-31

来源:互联网

最近在做一个塔防对战的游戏,在各客户端,相同的怪物在同一时刻从左边出发,按照相同的帧频相同的速度(Event.ENTER_FRAME)走向右边,结果我发现,在不同的机器上的各客户端怪物行走所用的时间不同,有的机器上怪物已经走到右边了,但有的机器上的怪物距离右边还差好一段距离,时间上有时能相差好几秒,请问大家这种问题怎么解决呀?看了一下各机器上的CPU使用情况都是很低的,也就是说并不是CPU导至的慢吧

作者: haoxue   发布时间: 2010-12-31

 让服务器发出每走一步的指令?
 或者是定期同步一下?
 
 

作者: flash023   发布时间: 2010-12-31

呵呵。有意思。這個問題讓我想到星際爭霸在網速卡的時候有的人在等待讀秒。有的人卡在那段情況
總的來說。在服務端會有一個計時器進程。
如果每單位時間向8個用戶分派更新的內容。而單位時間內8個用戶並沒有全部回調。
也就是有人速度慢跟不上。這個時候服務器就掛起了這個定時器等待卡住的用戶返回後再繼續。

所以enterFrame不應該使用。
星際2有一個所謂的遊戲時間,基本構成和計時器一樣的,就是有一套自己的刷新時間機制。
客戶端的更新應該跟這個同步。有的時候玩遊戲卡一下。突然裡面的角色像快動作一樣跑很遠。
也是因為這個。當一個刷新慢的客戶端更新服務器的狀態發現計數比服務器慢很多的時候需要更新好幾個時間戳導致。

作者: enc0717   发布时间: 2010-12-31

这样说的话,服务器向客户端发送计时指令的时间单位为多少比较好呢,每秒发送一次,还是每1/25秒?

作者: haoxue   发布时间: 2010-12-31

 以前做过一个类似东东,心跳设置 根据服务器的情况来
 我觉得每秒2、3 次差不多吧

作者: flash023   发布时间: 2010-12-31