我正在建立一个在线多人桌球游戏,我很难想到多人物理模拟的最佳方法。我想到了三个可能的场景,每个场景都有自己的优点和缺点,我想听听那些已经实现了类似内容或有多人在线游戏经验的人的意见。
第一个场景:客户端上的物理模拟:玩家轮流拍摄,然后将镜头和电源的角度发送给服务器,服务器会使用这些值更新所有客户端,以便他们可以独立模拟镜头。
优点:
缺点:
第二种情景:
对一个(即“主人”)客户进行物理模拟(例如谁曾拍摄过),然后将每个物理步骤广播给其他人。
优点:
缺点:
1.Server过热。每个时间步骤“主”客户端将所有球的坐标发送到服务器,并且服务器将必须将它们广播给房间中的其他人。 2.“大师”玩家作弊仍有可能。
第3种场景:物理将在服务器上进行模拟。
优势:
缺点:
修改 我正在制作一些类似的游戏,以防有人熟悉他们如何克服这些问题:
http://apps.facebook.com/flash-pool/
http://www.thesnookerclub.com/download.php
http://gamezer.com/billiards/
答案 0 :(得分:0)
我认为第三个是最好的。
但是如果在将服务器发送到客户端之前计算服务器中的所有冲突和移动(每次碰撞和移动等等),那么你可以做得更好。然后客户只需要“执行”它们。
如果你这样做,你每次只发送一次信息,这将大大减少网络问题。
正如JimR所写,你应该使用速度或运动方程而不是通过小步增量模拟(如Runge-Kutta方法)做一小步
服务器发送给客户端的信息如下所示:
Blackball hit->move from x1,y1 to x2,y2 until time t1
Collision between blackball and ball 6 at time t1
Ball 6 -> move from x3,y3 to x4,y4 until time t3
Blackball -> move from x5,y5 to x6,y6 until time t4
Collision between Ball 6 and Ball 4 at time t3
and so on until nothings move anymore
此外,您可能需要一组表示不同物理方程的类,并且可以将它们序列化以将它们发送到客户端(Java或C#可以轻松地序列化对象)。