网站首页 > 知识剖析 正文
注明:本篇文章所有代码区均可向右拖动查看完整代码。
这是一个按照指定路径滑动的验证图,从1到4按照顺序滑动。通常我们会通过打码平台获取这几个点的坐标值,之后在进行模拟人工滑动,今天这篇文章就是关于滑动这部分的内容。
在讲解这个之前我们先来理解一个概念:相对坐标和绝对坐标。下面我们结合图例来说一下:
(一)绝对坐标:
这个坐标是我们平时最常用的坐标。
图中①位置的坐标是188,386,它的数值是根据它和模拟器屏幕(手机屏幕)左上角的距离得到的。
(二)相对坐标。
同样还是①这个位置,坐标变成了183,74,这个坐标是相对于红框左上角的位置得到,也就是把方框左上角当做(0,0)。我们通过打码平台得到坐标数值,因为平台只是收到你的图片截图,并不知道图片在你手机屏幕的什么位置,所以只能是给你相对于图片左上角的坐标。
(三)相对坐标怎么转换成绝对坐标。
用相对坐标加上你的截图时截图范围的左上角坐标值,就是绝对坐标了。
还是上图,①点的相对坐标是(183,74),图片左上角坐标是(5,312)
那么绝对坐标计算方法(183+5,74+312),计算结果得到绝对坐标是(188,386)。
接下来讲滑动这部分内容:
先介绍一下坐标返回值:183,74|342,177|205,223|332,76
这些坐标都是相对于图片左上角的相对坐标。
图片的截图的位置坐标(5,312)
下面开始滑动方式,我们从简到难的介绍,涉及到的滑动命令:
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
(二)循环滑动
上面的方法虽然直观,但是代码看着略显臃肿,并且每个点具有规律性,所以可以用循环来写。
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
(三)固定分段滑动
所谓分段滑动,就是把两点之间加几个点,并且点不在一条直线上,形成折线的效果。
以上图为例,两点之间分成了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
可以看到线条有一定的弯曲度了,不再是直线。
(四)自定义分段数滑动
上面说的是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就是段数
如果用变量表示,就可以控制段数了。来写个分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
段数越多,线条越曲折,不过需要注意如果每一段用时是固定的话,段数越多用时越长,这样也不好,所以把段数和用时也做关联性。
来个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
最后我们来封装个函数
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
大功告成,整篇文章的内容就是我在编写这段代码时的思考过程。有时候代码不是一蹴而就的,而是不断修改完善,最终实现自己想要的效果。
猜你喜欢
- 2025-06-28 组合SISTAR公开新专 性感热曲引期待
- 2025-06-28 换新手机最烦传文件,尤其是苹果和安卓机,你该学学这招
- 2025-06-28 原创自研uniapp+vite5+pinia2手机版后台OA系统
- 2025-06-28 「龙腾网」心理探秘:为什么悲伤的歌曲会让我们感觉良好?
- 2025-06-28 小程序echarts和分包使用(微信小程序echarts降低层级)
- 2025-06-28 一块铝合金的非凡「铝生」:认识 Magic Trackpad
- 2025-06-28 SISTAR多顺自曝与名模柯尔摩亲密照
- 2025-06-28 在小程序里实现一个知乎浮动按钮(知乎小程序怎么用)
- 2025-06-28 事件——《JS高级程序设计》(js高级程序设计怎么样)
- 2025-06-28 韩国偶像团体扎堆回归 SISTAR防弹少年团Kara帅哥靓女看不停
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)