虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)

大家好,我是公众号3分钟学堂的郭立员,今天继续我们按键精灵安卓版的教程讲解,这期讲一下脚本模拟手动滑动的案例,下面开始讲解。

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(1)

这是一个按照指定路径滑动的验证图,从1到4按照顺序滑动。通常我们会通过打码平台获取这几个点的坐标值,之后在进行模拟人工滑动,今天这篇文章就是关于滑动这部分的内容。

在讲解这个之前我们先来理解一个概念:相对坐标和绝对坐标。下面我们结合图例来说一下:

(一)绝对坐标:

这个坐标是我们平时最常用的坐标。

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(2)

图中①位置的坐标是188,386,它的数值是根据它和模拟器屏幕(手机屏幕)左上角的距离得到的。

(二)相对坐标。

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(3)

同样还是①这个位置,坐标变成了183,74,这个坐标是相对于红框左上角的位置得到,也就是把方框左上角当做(0,0)。我们通过打码平台得到坐标数值,因为平台只是收到你的图片截图,并不知道图片在你手机屏幕的什么位置,所以只能是给你相对于图片左上角的坐标。

(三)相对坐标怎么转换成绝对坐标。

用相对坐标加上你的截图时截图范围的左上角坐标值,就是绝对坐标了。

还是上图,①点的相对坐标是(183,74),图片左上角坐标是(5,312)

那么绝对坐标计算方法(183 5,74 312),计算结果得到绝对坐标是(188,386)。

接下来讲滑动这部分内容:

先介绍一下坐标返回值:183,74|342,177|205,223|332,76

这些坐标都是相对于图片左上角的相对坐标。

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(4)

图片的截图的位置坐标(5,312)

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(5)

下面开始滑动方式,我们从简到难的介绍,涉及到的滑动命令:

TouchDown x1, y1, 1 TouchDown x2, y2, 1, 100 TouchUp 1

(一)固定值滑动

先计算出每一个点的绝对坐标,然后从1开始滑动3次。

Dim x0=5,y0=312 //截图对应的左上角坐标 Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") Dim 点1=split(点数组(0),",") Dim 点1x=点1(0) x0 Dim 点1y=点1(1) y0 Dim 点2=split(点数组(1),",") Dim 点2x=点2(0) x0 Dim 点2y=点2(1) y0 Dim 点3=split(点数组(2),",") Dim 点3x=点3(0) x0 Dim 点3y=点3(1) y0 Dim 点4=split(点数组(3),",") Dim 点4x=点4(0) x0 Dim 点4y=点4(1) y0 TouchDown 点1x, 点1y, 1 TouchMove 点2x, 点2y, 1, 1000 TouchMove 点3x, 点3y, 1, 1000 TouchMove 点4x, 点4y, 1, 1000 TouchUp 1

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(6)

(二)循环滑动

上面的方法虽然直观,但是代码看着略显臃肿,并且每个点具有规律性,所以可以用循环来写。

Dim x0=5,y0=312 Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then TouchDown 坐标(0) x0, 坐标(1) y0, 1 Else TouchMove 坐标(0) x0, 坐标(1) y0, 1, 1000 End If Next

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(7)

(三)固定分段滑动

所谓分段滑动,就是把两点之间加几个点,并且点不在一条直线上,形成折线的效果。

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(8)

以上图为例,两点之间分成了4段,假设是4等分,中间3个拐点的坐标计算方法是:

第1个拐点:点① (点②-点①)*25%

第2个拐点:点① (点②-点①)*50%

第3个拐点:点① (点②-点①)*75%

为了不让每个拐点都在一条直线上,得到坐标加上一个随机数,范围是(-5,5)。

Dim x0=5,y0=312 Dim x,y Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then x = 坐标(0) x0 y = 坐标(1) y0 TouchDown x, y, 1 Else TouchMove x (坐标(0) x0 - x) * 0.25 rand(), y (坐标(1) y0 - y) * 0.25 rand(), 1, 500 TouchMove x (坐标(0) x0 - x) * 0.5 rand(), y (坐标(1) y0 - y) * 0.5 rand(), 1, 500 TouchMove x (坐标(0) x0 - x) * 0.75 rand(), y (坐标(1) y0 - y) * 0.75 rand(), 1, 500 TouchMove 坐标(0) x0, 坐标(1) y0, 1, 500 x = 坐标(0) x0 y = 坐标(1) y0 End If Next Function rand() rand=int(11*rnd()-5) End Function

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(9)

可以看到线条有一定的弯曲度了,不再是直线。

(四)自定义分段数滑动

上面说的是4段,其实也可以用循环来实现

Dim x0=5,y0=312 Dim x,y Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then x = 坐标(0) x0 y = 坐标(1) y0 TouchDown x, y, 1 Else For j = 1 To 4 TouchMove x (坐标(0) x0 - x) * (j/4) rand(), y (坐标(1) y0 - y) * (j/4) rand(), 1, 500 Next x = 坐标(0) x0 y = 坐标(1) y0 End If Next Function rand() rand=int(11*rnd()-5) End Function

在代码中的4就是段数

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(10)

如果用变量表示,就可以控制段数了。来写个分8段看看

Dim x0=5,y0=312 Dim x,y Dim 段数=8 Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then x = 坐标(0) x0 y = 坐标(1) y0 TouchDown x, y, 1 Else For j = 1 To 段数 TouchMove x (坐标(0) x0 - x) * (j/段数) rand(), y (坐标(1) y0 - y) * (j/段数) rand(), 1, 500 Next x = 坐标(0) x0 y = 坐标(1) y0 End If Next Function rand() rand=int(11*rnd()-5) End Function

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(11)

段数越多,线条越曲折,不过需要注意如果每一段用时是固定的话,段数越多用时越长,这样也不好,所以把段数和用时也做关联性。

来个28段的效果。

Dim x0=5,y0=312 Dim x,y Dim 段数=28 Dim 返回值="183,74|342,177|205,223|332,76" Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then x = 坐标(0) x0 y = 坐标(1) y0 TouchDown x, y, 1 Else For j = 1 To 段数 TouchMove x (坐标(0) x0 - x) * (j/段数) rand(), y (坐标(1) y0 - y) * (j/段数) rand(), 1, int(2000/段数) Next x = 坐标(0) x0 y = 坐标(1) y0 End If Next Function rand() rand=int(11*rnd()-5) End Function

虚拟按键模拟位置移动(若干坐标点依次模拟人工滑动)(12)

最后我们来封装个函数

Dim x0=5,y0=312 Dim 段数=28 Dim 返回值="183,74|342,177|205,223|332,76" Call 分段滑动(返回值, x0, y0, 段数) Function 分段滑动(返回值, x0, y0, 段数) Dim x,y Dim 点数组=split(返回值,"|") For i = 0 To UBOUND(点数组) Dim 坐标=split(点数组(i),",") If i = 0 Then x = 坐标(0) x0 y = 坐标(1) y0 TouchDown x, y, 1 Else For j = 1 To 段数 TouchMove x (坐标(0) x0 - x) * (j/段数) rand(), y (坐标(1) y0 - y) * (j/段数) rand(), 1, int(2000/段数) Next x = 坐标(0) x0 y = 坐标(1) y0 End If Next End Function Function rand() rand=int(11*rnd()-5) End Function

大功告成,整篇文章的内容就是我在编写这段代码时的思考过程。有时候代码不是一撮而就的,而是不断修改完善,最终实现自己想要的效果。

好了内容就这些,最后还是老规矩,觉得文章还行的话,点赞、转发、留言一条龙服务。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页