
在某些场景中,您需要离开鼠标移动轨迹,这更符合视觉体验,否则光标会闪烁吗?更不用说,它一定对眼睛有害。就在上周,一个小伙伴咨询了背景鼠标尽管我没有解决运动问题,但我不知道老板给出的解决方案是否最终解决了问题。但是解决问题的想法值得探索和学习。
1
问题背景介绍

对于背景中鼠标移动的问题,我咨询了一个大家伙。他的建议是尝试缓慢移动。每个移动的距离约为10像素,因此计算机感觉到它实际上正在缓慢移动。这本身不是。作弊例如,要从坐标10,10移至100,100,我们可以先移至20,20,然后移至30,30,然后移至40,40 ...最后移至100,100。
2
实现思路

后来,我为我的咨询合作伙伴起草了一个实施构想。文字很随意,所以让我们看一下...
我们假设我们从左上角移到右下角,自然就是x1
7是怎么来的?如果正方形的左上角移至右下角,则对角线长度为7 *1.414,接近10个像素。尽管水平和垂直比率的可变性更大,但根据操作习惯,选择7到8或9到10,我喜欢研究该算法可以自己研究更实际的参数。

然后,还没有结束,我错过了7个句子之前的一个句子,然后移到x2,y2。
3
编码

Call liner_move(10,10,1000,800)
Function liner_move(x1, y1, x2, y2)
k = (y2 - y1) / (x2 - x1)
Do While x1 < x2
MoveTo x1,y1
x1 = 7 + x1
y1 = 7 * k + y1
Delay 20
Loop
MoveTo x2, y2
End Function上面的代码使用坡度并直线移动,每次移动7,k的水平和垂直坐标,看起来都很棒,不是吗?
但是,您只能从左上角移动到右下角。如果要从右上角移动到左下角,或者x2 = x1,您将大为震惊。似乎您需要执行非常复杂的计算,并且必须考虑斜率k不存在。这个...
后来,我的灵感来了,我编写了以下简单而又高大的代码。代码不只是为了实用吗? !
Call liner_move(1000, 800, 50, 20)
Function liner_move(x1, y1, x2, y2)
dx = x2 - x1
dy = y2 - y1
Do While sqr((x1 - x2) ^ 2 + (y1 - y2) ^ 2)>10
MoveTo x1,y1
x1 = dx * 0.001 + x1
y1 = dy * 0.001 + y1
Delay 0.5
Loop
MoveTo x2, y2
End Function为了简要说明,其思想是计算机的分辨率通常在2000 * 1800以内。我们将其乘以0.001,仅为2 *1.8。即使从0,0移至2000,1800,每次水平和垂直移动2,1.8时,该距离也明显小于10。
基于此原理,我们可以每次移动0.001横坐标差,即代码中的0.001dx和0.001dy。当然,循环将经历1000次。如果将延迟设置为0.5,则将为500ms,如果延迟较大,则会变慢。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-326741-1.html
身材好
反正中国门口天天被侦查
文笔悟性临摹性值得称道
真心很好听