您现在的位置: 天下网吧 >> 网吧天下 >> 个人电脑 >> 电脑维修 >> 外设维修 >> 正文

Windows7系统高阶鼠标调试详解

[作者:电脑店 来源:电脑店 时间:2013-3-26我来说两句

 我们先略过鼠标引擎对信号的处理,只考虑软件方面。鼠标CPI全称counts per inch,每英寸测量数,一般容易误称为DPI,也就是dots per inch,每英寸点数,点代表屏幕上的点,即像素。只有当鼠标报告的单位移动导致指针在屏幕上移动正好一像素时,DPI才等于CPI。此时鼠标移动与指针移动之间的关系称为“精确一比一”。比如DPI最常用的为400,此时单位移动距离为1/400英寸,当鼠标移动1/400英寸时,鼠标向系统报告一个单位移动。如果设置为精确一比一,那么指针将精确地移动一个像素。

  XP和Vista在启用EPP时会根据显示器分辨率和刷新率调整鼠标速度,内部计算中包括一项“*RefreshUpdateRate/SCreenResolution”,即乘以显示器刷新率除以分辨率。所以更高的刷新率、更低的分辨率会导致更快的鼠标速度。首先,XP和Vista假定鼠标位置在显示器每次刷新的时候同时得到更新,但事实上,鼠标位置是由USB总线报告的每次信号更新的,与显示器刷新率并不同步。正确的公式应为

  在话题进入去加速之前,我们先谈一下所谓的负加速。对于包括CS在内的使用WM_MOUSEMOVE或GetCursorPos读取鼠标移动的游戏,鼠标被锁定在屏幕中心。游戏在每一帧过后都会不断重置鼠标的位置到屏幕中心,这是为了避免指针移动到屏幕边缘被挡住无法移动。当鼠标移动时游戏中隐藏的鼠标指针随之移动,在每一帧内,游戏计算出指针从屏幕中心移开的距离作为玩家准星的移动距离,然后将鼠标重置到屏幕中心。下一帧再重复相同步骤,以此往复。只有当控制台被调出时游戏才不会重置鼠标到屏幕中心。

  假设控制面板设置为9/11,鼠标移动1个单位,经过运算1*2.5=2.5,指针移动2像素;下一次USB回报时报告鼠标再移动1个单位,经过运算1*2.5=2.5,与上次移动余数相加为3,这时指针移动3个像素。这样一来,同样的鼠标移动,在屏幕上却会导致不同的指针移动。而且,即便鼠标以最小单位逐步移动,屏幕上仍有某些像素一定会被跳过,无法用指针精确定位到。此时定位的不准确是由于倍乘系数>1,导致精密定位的困难。

  如果用户没有管理员权限,系统会显示部分补丁内容导入失败,这是由于补丁的一部分内容将Windows欢迎屏幕的加速关闭。如果这部分内容导入失败,而用户又使用欢迎屏幕登录系统的话,欢迎屏幕的加速度会使未完全导入的补丁产生误差,鼠标变向时将产生每鼠标单位移动1个像素的误差。1像素的微小误差一般很难注意到,但如果要修复这一问题,有以下几个方法可以任选其一使用:

 

 

  CS的去加速参数

 

  分析了所有注册表补丁后,我们讨论一下CS的去加速启动参数。先来看一段Goldsource引擎(HL,CS)的源代码:

 

=========== 

IN_StartupMouse 

=========== 

*/ 

void IN_StartupMouse (void) 

if ( gEngfuncs.CheckParm ('-nomouse', NULL ) ) 

return; 

 

mouseinitialized = 1; 

mouseparmsvalid = SystemParametersInfo (SPI_GETMOUSE, 0, originalmouseparms, 0);

 

if (mouseparmsvalid) 

本文来源:电脑店 作者:电脑店

我来说两句(请遵守法律法规)
声明
本文来源地址:
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下