b) PM_WalkMove()and PM_Friction() engine functions ( -link- & -link- ). As you alreadycould understand, we still can get 2 FOG bhops even with ideal scrolldistribution. On such occasions, both PM_WalkMove() and PM_Friction() willstrike.
b) PM_WalkMove()和PM_Friction()函数。通过前面的分析大家应该都知道,即使在做到理想滚轮分配的情况下,我们仍然可以在地面停留两帧再连跳(译者:即落地的第一针不跳,第二帧再跳)。在这种情况下,函数PM_WalkMove()和PM_Friction()将发挥作用。
fuser2 is a jumpmodificator that makes us slow down after performing a jump. After a jump,engine sets it to 1315.789428 and each frame afterwards it decreases it's valueby current 'msec' value. If your FPS is 100 then your msec is 10, this meanthat to completely get rid of slow down effect you need to wait 1.315 seconds.
fuser2是一个在我们完成每个跳跃后判断是否降低速度的跳跃修正参数。每完成一次跳跃,引擎将其设置为1315.789428(离地那一帧的初值),之后在空中的每一帧这个数值都按在空中停留帧数的的一元函数减少(公式:fuser2=1315.789428-100*空中停留帧数,此公式针对100fps,其他情况可类推)。如果你的FPS是100的话,那么每一帧就为10毫秒,这就意味着要完全摆脱这个参数造成的减速,你必须在空中呆1.315秒(译者:100fps平地非蹲连跳空中运动时间是0.67秒,显然平地连跳一定会受到这个参数的限制)
PM_WalkMove()checks if fuser2 value is bigger than 0.0 and if so, both velocity.x and velocity.ywill be multiplied by (100.0 - pmove->fuser2 * 0.001 * 19.0) * 0.01.
PM_WalkMove()这个函数会检测fuser2的值,看是否大于0(即在空中停留时间是否小于1.315秒),若是,则X轴和Y轴方向的速度都会乘上减速系数N=(100-fuser2*0.001*19)*0.01
PM_Friction() iscommon ground friction function which reduces our speed onsquareroot(velocity.x^2 + velocity.y^2) * 4 * 0.01 each frame we are on theground (this does not apply for 1 FOG bhops).
PM_Friction()是正常地面摩擦力函数,我们在地面停留每帧的摩擦力公式为
(译者:根据公式,摩擦力与模型在地面的速度有关,并不是一个恒定值)
以上PM_WalkMove()和PM_Friction()公式不适用于只在地面停留1帧的连跳!