提示避免多人游戏中的同步问题和使用MVC模式重放

时间:2009-07-04 07:55:03

标签: c++ model-view-controller multiplayer

只是想知道人们在避免多人游戏中的游戏同步问题以及使用模型视图控制器模式中的模型从游戏逻辑中重放录制的提示

到目前为止我已经意识到,在它之外的任何地方给予非const访问模型并不是一个好主意,但除此之外我有点卡住并且仍然存在许多同步问题

感谢

2 个答案:

答案 0 :(得分:1)

要实现分布式同步,您需要指定的单个主模型,最好是在单独的游戏服务器上。控制事件转到那里,得到时间戳,进行的所有事情的交互得到计算,并且时间戳更新事件被发送出去。只需存储和重放更新事件即可完成重播。

由于模型在单独的服务器上运行,您甚至无法对其进行视图const(同步)访问。通用MVC并不是真正的正确方法,它更多:

model -> event stream -> local model -> view
^                             | 
|                             v
selector <- action stream <- controller

两个流肯定是异步的,可能是UDP,所以有损。

避免多线程,如果你有任何它应该完全本地化在上述组件之一(例如选择器中的线程池,模型中每个区域一个线程)。

对于很多游戏,出于性能原因,您需要打破该模型并让控制器直接更新本地模型的某些部分(例如,您可以在拔掉互联网连接的情况下在Wow中四处走动)。这肯定会导致同步问题,但对于具有ping时间&gt;的网络上的实时游戏可能无法避免。人类的反应时间。

答案 1 :(得分:0)

通过同步,您的意思是多线程同步吗?如果是这种情况,我会使用互斥锁。如果你的意思是通信同步可以解释一下发生了什么?