dota打了快10年,水平一点没进步,最近已经开始被小学生们虐,但这并不能妨碍我作为年长猪队友,仗着物质优势,拥有各种神器鼠标键盘。大神和我说,以你的猪意识,远没到设备影响水平的时候。而我的一贯哲学是,反正意识水平就这样了,如果设备好一点,发挥多少还是有些进步的。
但每次刚换鼠标都是后悔剁手,因为怎么动都不如旧糟糠顺手。 今天看到这个问题,才想起鼠标移动的过程里藏着这么一个好梗。回答完觉得还没显完老夫手段,再补发一弹。
笔记本触摸板的滑动距离是如何映射到屏幕上的实际距离的?
做两个实验:
1.缓慢移动手指,这时候屏幕上光标的移动速度基本等同手指的移动速度
2.快速移动手指,这时候与1移动相同的距离,但是屏幕上的光标可以移动很远的距离
我想知道:
1.触摸板是用什么样的方法来判断手指移动的速度?
2.应该用什么样的映射方法使人觉得在触摸板上进行操作是“自然的”?
3.是否有其他变量(除手指移动速度之外)决定屏幕上光标的移动速度?
人机交互里有一个特别有名的费茨定律-Fitts' law,指点的当前位置和目标位置相距越远,就需要越多的时间来移动;而同时,目标的大小又会限制移动的速度,因为如果移动得太快,到达目标时就会停不住,不得不根据目标的大小提前减速,这就会减缓到达目标的速度, 延长到达目标的时间。
这个定律因为太经典,UX少年们研究了很多(readlist),也爱用这个定律当令箭欺负工程师改界面。
- T = a + b log2(D/W+1)
- T代表完成移动所需的平均时间
- a 代表光标开始/停止时间
- b 代表光标的移动速度 (主角光环加粗显示)
- D 代表从起点到目标中心的距离
- W 代表目标的宽度 (按移动方向)
fitts' law 中一般关注在D 和 W, 但如果讨论鼠标,b (代表光标的移动速度) 其实变成了非常有意思的对象。
1.缓慢移动手指,这时候屏幕上光标的移动速度基本等同手指的移动速度
2.快速移动手指,这时候与1移动相同的距离,但是屏幕上的光标可以移动很远的距离
笔记本触摸板的滑动距离是如何映射到屏幕上的实际距离的?
"提高指针精确度" 是mouse acceleration的设置,不知道为什么搞了这么个诡异的翻译,而且事实上,勾选这个通常不能让你移动的更精确。真正地区别是你快速移动手指时,屏幕上的光标会移动几倍的距离。
mouse acceleration 的存在是因为以前的鼠标 cpi 特别低。早期的鼠标只有15-20的cpi,也就是说鼠标移动一英寸,最多能采样出20个点。考虑到鼠标需要能够准确地指到屏幕上的每一个像素,如果把这些点映射到屏幕上,手移动一英寸,光标在屏幕上移动20个像素。所以跨越1280px的屏幕,需要移动64英寸,162厘米。当时的大牛们就发明了mouse acceleration来解决这个问题,当移动速度变快时,比例就不再是1:1,听起来有点缩地成寸的道法味道。
事实上也不是所有人都喜欢mouse acceleration。移动的过程中是肌肉记忆和反应时间互相适应的过程。但mouse acceleration的存在会使得整个移动过程的坐标映射变得非线性,从而破坏肌肉记忆 - 当离目标越来越近,用户就需要不停地调整手移动速度。
另外一方面,今天的大部分鼠标其实并不怎么需要 mouse acceleration 。在自己PC上了截了个图,可以看到我的鼠标是Razor DeathAdder 2013。本身是 6400的cpi, 被我降成了4900,然后禁止了mouse acceleration。因为6400 cpi 太高, 所以反而调整了sensitivity,把高cpi 重采样成了4900。
最后补一弹万能的hci research。大神们好多年前就开始考虑肌肉记忆这个问题,希望能有一个线性移动距离映射(不影响肌肉记忆),同时又能缩地成尺的方案。这里面有各种充满想像力的思路,但我最欣赏的是偶像takeo在2000年发表的 auto zoom。简单有效。
浏览器的内容会根据用户滚动地速度自动地放大缩小,以此来保证在用户端感知滚动条移动地速度是恒定地。