魔兽世界运算与预判的研究
作者:
来源:
日期:2007-04-25
-------------开始之前-------------
wow的程序运作机理可能会让人头晕 然而肉搏战的时候绝对不可能不考虑这个因素 so.耐心的看把...please
如果实在看不进去...那么直接去看预判部分把...那块很好懂... (弄明白how,要比弄明白why容易些)
--------------走位-------------
wow的走位运算方式是这样:
客户端(即玩家这边)从服务器端获得所有周围角色的位置,方向,速度 这个更新大约每秒4-6次,是固定间隔
然而,当服务器端的玩家位置信息没有更新的时候,为了节约带宽,则不发送位置更新信息 此时,客户端上显示的该玩家会沿着之前的方向和速度一直运行---直到服务器端发送更新信息为止
同时,客户端每秒大约向服务器端发送自己的位置,方向,速度信息4-6次,也是固定时间间隔
!!!也就是说,所有角色实际上在服务器端的运行速度都不是线性的,而是跳跃式的,如果你的速度足够大,那么实际上在服务器端你就是在瞬移 !!!然而在其它人眼里你不会瞬移,只是很快速的改变方向,因为当你的位置信息不更新的时候,你的位置由客户端自己计算出来---然而在服务器端你的位置并没有发生任何改变
so:一旦某个玩家掉线,则服务器端这个玩家的角色的位置停止更新,在其它玩家看起来,它将保持掉线前的运行状态,就会做匀速直线运动,然而,如果你想要攻击/治疗它的话,必须要接近它掉线时的位置才行---因为在服务器端它实际上从掉线起就没有动过
结论1:也就是说,玩家看到的角色位置,并不等于服务器端的位置----这个差距会随着速度的增大而增大
-----------技能--------
wow的技能运算是这样:
按下技能的瞬间,部分技能会做本地判定(即距离,方向,位置等等条件判定),[而部分技能不会] 如果进行本地判定失败,那么这个技能直接无法释放---这就是为什么有的时候预判到对方的位置也放不出技能的缘故---本地判定是完全按你看到的情况走的,即使服务器端对方在你面前,只要你屏幕上不在,那么这个技能就判定失败
当本地判定通过(或者不需要本地判定的技能被按下),一个发送技能申请会被发送到服务器 在服务器端接受到这个申请的瞬间,会做一个服务器端技能释放判定---每一个技能都必须通过这个判定,同本地判定一样,对距离,方向,位置,法力等等条件做检验----这个判定是完全按服务器端的情况走的,即使你在自己的屏幕上看到自己的位置很合适,也可能通不过服务器端判定
当判定结束,服务器端认为该技能可以释放,该技能也不会立即发生作用,而是插入一个运行队列,这个队列里包括了所有的dot/hot/dd/buff/debuff一切的一切,将会在下一个心跳周期(程序完成一次完整循环的时间)统一计算,并在周期的末尾统一更新
so:实际上服务器的心跳周期在1/4秒-1/6秒之间(和更新位置类似),如果服务器运算繁忙,则这个数字还要增大,这就是为什么血加出去了但是人也同时死了,和对方同时放出控制技,甚至同时直接杀死对方的缘故---因为无论按键先后,只要申请在一个周期内到达服务器,就按同时运行处理
即:服务器端对技能的发动判定是即时的,但是对技能的运算是伪即时的,是非线性的
-------中场休息-----
我想,,,看到这里...没有程序设计基础的应该已经晕了... 当然,如果直接跳跃阅读到这里...那么没效果...
休息时间可以随意上厕所...我说点其它的
话说野性德其实很需要闪避属性---而这个在tbc非常令人满意---达到40%闪避的时候几乎可以正面猫死盗贼,尤其当盗贼只有20%左右闪避的时候,,,而且还有bt的爆击回血光环...
注意...在6秒内停止行为并且连续避免伤害(例如闪避,抵抗,免疫,都算),就可以脱离战斗 也就是说盗贼开了闪避6秒就可以脱离战斗!
然后继续...
共3页: 上一页 1 [2] [3] 下一页
本新闻及文章仅代表发表厂商及作者观点,不代表本站本身观点
|