tft每日頭條

 > 生活

 > 虛拟按鍵模拟位置移動

虛拟按鍵模拟位置移動

生活 更新时间:2024-12-13 00:02:54

大家好,我是公衆号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

大功告成,整篇文章的内容就是我在編寫這段代碼時的思考過程。有時候代碼不是一撮而就的,而是不斷修改完善,最終實現自己想要的效果。

好了内容就這些,最後還是老規矩,覺得文章還行的話,點贊、轉發、留言一條龍服務。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved