2007_08_13炸弹人开发日志

先说说这个游戏网络模块的实现原理:
简单的说就是把玩家的输入信号发送到服务器,再由服务器来统一更改所有
玩家的虚拟输入设备。为了保证游戏运行不受输入的具体数据的影响,因此
服务器在每间隔一段时间就会发送时间驱动包.而输入数据就在这驱动包中.
客户端的游戏时间也是由服务器来驱动的。

Q1:服务端更新时间应该设多大?
A1:我在本机分别设置了200ms,100ms,60ms,50ms,40ms,30ms,20ms,10ms
    200ms当然受不了了.
    其中100ms看起来响应最快,但是最卡
    当时间小于40ms的时候,对输入的响应有明显影响.
    估计数据包的收发过于频繁,导致游戏卡在网络的接收数据上了。

    考虑到实际网络的问题,因此我决定在游戏中以100ms做为游戏运行时间单位.

Q2:如何解决游戏运行不流畅的问题?
A2: 我有如下几个方案:
    1.使用介面与数据分离的方法,主要是针对游戏移动部分.在客户端接收服务器再次更新的这100ms之前由介面独立运行.之后再进行修正.
    2.只作小量更改,把100ms按照当时的帧时间进行分片,比如上一帧需要10ms.那么我们这次就运行10ms.如果下一服务器数据包刚好来到,
      则用同样的方式循环执行,如果数据包早到.那么立即处理当间进行的数据包.比如我正在执行的数据还有90ms的时候.却收到了服务端的
      数据包.那么剩余的90ms一并执行,而不分开执行了.总之分片处理的总是最后一个网络更新包.如果数据包晚到的话,那么就只能是等待该

     数据包罗...,哦还有一点.对于录象来说.只要记录有输入信号的数据包以及该数据包的时间就行了.
      中间太多的空白更新数据包就不用记录了.因此根据各个玩家的网络状况与机器性能的不同.同一个时间驱动包,有可能执行十几次,
      也有可能只执行1次.但在该时间点上的结果应该是一样的.虽然看起来各机器的有效帧并不一样.还是早先说过的问题10ms = 1ms加10次.

     
    3.不知要更改多少,对客户端做预测?网上看到的,不过说得不是太详细。而且对于我这个小游戏是不是有点小题大作了?就连FIFA这样的游 

    戏还不是通过对玩家的输入进行重放来达到网络效果的.
     

   相比之下,我比较喜欢方案2.因为游戏改动最小。唉呀,这样的话之前乱改的的源文件都要删除啦.因为之前是以方案1来进行修改的.
   另外要说的是,由于时间是使用浮点数进行运算,而游戏使用的系统时钟的最小单位是1ms,因此录象可以使用1/2x,1x,2x,3x,4x...
   但不能使用1/3x ,因为可能会除不尽而导致浮点数的精度问题.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值