|
|
本帖最后由 xmiangui 于 2011-11-24 22:04 编辑
再讲一下CS的三参,我以前写过分析,不过太繁琐了,这次尽量讲的简洁一点。
CS 1.6和之前版本用的HL1引擎(GoldenSource引擎)早就开源了,源代码可以从开源社区上下载。看源代码很容易就能理解三参数的作用, 看C代码可比汇编容易多了。
首先讲使用Windows API控制鼠标平滑函数的三个参数,这部分微软的API技术文档里是公开的,百度百科的那篇鼠标加速度里也有。MouseSpeed、MouseThreshold1、MouseThreshold2。他们不仅仅是保存在注册表里的一个键值,更确切的来说,他们是Windows鼠标API的三个参数,注册表就相当于游戏里的存档,开机从注册表里读取这三个参数。而游戏时可以修改这三个参数(但不修改注册表)的,就好比打了游戏没存档,游戏关了三个参数就会恢复。
CS在初始化游戏的时候,会把这三个参数重置为(1,0,0),不加CS启动三参就是这个效果,有加速度。
插一段八卦:HL1引擎这么做的原因是,据说三参这样设置以后,Win NT 4以前的内核效果是:鼠标移动速度2倍化,无加速度。呵,当初可是为了去加速度才搞的这么一出。(当然,NT 5.1以前的内核反汇编程度远不如XP,这种方法在当时是否正确我个人也是怀疑态度。)显然,对XP和以后的操作系统这种方法就大错特错啦,这也是曾经流行过98比XP适合打CS这种说法的原因之一。结合这一段就可以看出LZ纠结的第一种方法为什么不对了吧,很多国内资料把98内核和XP以后内核的鼠标处理方法混淆在一起了。
回归主题,现在重头戏来了,加了三参又是什么效果呢?可以看这段CS鼠标初始化的代码:
/*
===========
IN_StartupMouse
===========
*/
void IN_StartupMouse (void)
{
if ( gEngfuncs.CheckParm ("-nomouse", NULL ) )
return;
mouseinitialized = 1;
mouseparmsvalid = SystemParametersInfo (SPI_GETMOUSE, 0, originalmouseparms, 0);
if (mouseparmsvalid)
{
if ( gEngfuncs.CheckParm ("-noforcemspd", NULL ) )
newmouseparms[2] = originalmouseparms[2];
if ( gEngfuncs.CheckParm ("-noforcemaccel", NULL ) )
{
newmouseparms[0] = originalmouseparms[0];
newmouseparms[1] = originalmouseparms[1];
}
if ( gEngfuncs.CheckParm ("-noforcemparms", NULL ) )
{
newmouseparms[0] = originalmouseparms[0];
newmouseparms[1] = originalmouseparms[1];
newmouseparms[2] = originalmouseparms[2];
}
}
mouse_buttons = MOUSE_BUTTON_COUNT;
}
也就是说,这三个启动参数就是控制不重置哪些加速度参数:
-noforcemaccel:不重置MouseThreshold1和MouseThreshold2
-noforcemspd:不重置MouseSpeed
-noforcemparms:不重置加速度全部三个参数
这下能看懂参数名字的意思了吧,-noforcemaccel就是不重置(noforce)鼠标(m)的加速度阀值参数(accel),-noforcemspd就是不重置(noforce)鼠标(m)的MouseSpeed参数(spd),-noforcemparms就是不重置(noforce)鼠标(m)所有三个参数(parms)。
有的人比较敏锐,说加了三参,我觉得CS还是有加速度呀!是的,CS由于引擎所限,至少还有2个地方会影响鼠标移动,而且我估计也是无解的:
第一个,就是我前面提到过的指针回归中点。解释一下,为什么FPS游戏准星永远在中间?因为引擎会不断刷新指针让它回到中点,这可以理解为一种负加速度。
第二个,CS的默认FOV(可视角度)是90,横向、纵向都是,但显然你的显示器不是正方的。所以横向纵向移动总是不太一致。
这两者我个人认为是没啥解决方法,虽说可以修改FOV,但又会让人觉得怪怪的。只能说现在新的游戏引擎发展会解决这类引擎带来的问题。
不过,现在的游戏讲究的是真实性……只会有更多的因素让你瞄不准,比如现在的游戏,枪口会随机飘动,比神马直线修正的可厉害多了……
好,讲一下结论:
- 100%有效去除操作系统加速度的方法:用XP操作系统,用3楼的那个补丁,重启,无视那些杀软的报警。骨灰玩家可以使用哦,老子就是玩游戏,Win7杀软都滚一边去~
我上面为什么要黑体“操作系统加速度”呢?比如有的游戏为了提高真实性会故意在游戏里加入自己的加速度,这个就和操作系统无关了,也没有通用的去掉的方法。这种情况下面也不会不讨论。
1 - 比较靠谱的方法,用MarkC的那个补丁生成自己使用环境的reg文件,导入注册表,马上重启。保证以后显示器都是一个刷新率(比如液晶的60Hz),基本不会有什么问题。
注意:这个方法仅对Windows当前用户有效,当然一般人也不会再自己个人电脑上建一堆用户还切换着玩游戏。
2 - 三参仅适用于CS,其他游戏参数不会故意去和CS搞得一样,自然加三参就无效了。有了三参其实不用reg文件也没问题,CS已经没操作系统给的加速度了。
|
|