暗影·夜光 暗影·夜光
为了增强你的人身安全,同时也方便你在忘记名字时找回,建议你对注册时填写的性别进行安全验证
关注数: 73 粉丝数: 116 发帖数: 3,547 关注贴吧数: 21
关于联机滚球的可行性 之前2jjy对这方面有过研究,最终还是放弃了。 按照2jjy的说法,联机滚球不能实现,因为网络延迟太大所以没法计时什么的…… 不过这个不是问题,和其他网络游戏一样,不能直接获取、变更坐标。就比如你玩DNF(PK的时候),延迟70多(跨线路不算)你的队友并不会瞬移。 其实只要是联机同步之类的都是将一些参数传回,计算,而不是将计算结果传回。估计当时2jjy只是传回坐标。对于没有物理引擎的物体,我们需要捕获对方所按下的按键,如果得到对方按住了↑键,另一端就开始以设定好的速度移动物体,当对方松开了按键,传回(数据量非常小。。)则停止移动物体。然后以固定时间来纠错即可。 而对于具有物理运算的物体,可以直接给它施加力量。即便有延迟,以200ms的延迟来同步坐标,运算结果几乎相同。如果要联机碰撞,70ms以下完全正常。当然我们的联机滚球游戏不用模拟两个球的碰撞,我们只要能创建一个实例(球)去标记对方的位置,作为对比即可。最后统计分数的时候可以从客户端提交,与服务端的计时比对,在允许的误差范围内即可视为正常成绩。 其实你玩QQ堂然后用一下加速外挂(没多久就掉线了)你会发现所有玩家都瞬移了。因为运算的时间步有差异,在纠错的时候会回到正常位置,所以你看到人物都是一顿一顿的。以中国的网络条件来看。在正常情况下,同线路最大延迟应该不会高于100ms。所以说,联机滚球一定可行。 服务端可以用PhyX模拟,使用 NxSence::SetTiming(这是C++,如果是C#、VB什么的把::改为.)调整时间步。考虑到延迟和性能问题, 200ms足以用于纠错(一秒五次)。 客户端的物理时间步可以调节为20ms。服务端的一次施加力量和客户端的10次效果是等同的。 如果客户端和服务端使用了不同的坐标系可以用矩阵转换来换算(要是都用PhyX那就轻松多了直接同步) 当然……旋转速度也要。。。 至于同步的算法……还没有…………………………………………(以后再来研究。。)
1 下一页