想法
用按键精灵在《【用文本文件让脚本动起来】实现简单的屏幕点击》的源码中已经示范根据画面点击特定的坐标,不过那是将坐标参数保存到另外一个文本中,这样会在实际开发中带来不少麻烦。所以这次会把坐标参数和CmpColorEx
的颜色组合并到一起。
思路
- 用按键精灵助手的抓抓工具选取好坐标后,将颜色组、坐标copy到txt中
- 复制的颜色组两边个带一个
"
,需要用UTF8.InStr
和UTF8.Mid
函数实现获取中间的字符
UTF8.InStr
:获取指定字符串在另一个字符串第一次出现的位置UTF8.InStr(开始位置, 原字符串, 搜索的字符串[,对比方式]) "对比方式,默认False,是否忽略大小写"
UTF8.Mid
:获取指定位置之后特定长度的字符串
自定义函数提取中间字符:UTF8.Mid(原字符串, 开始位置, 截取长度[,对比方式]
Function 提取中间字符(原字符串, 左边字符, 右边字符, 起始位置) Dim 左边位置,右边位置, 提取长度 左边位置 = UTF8.InStr(起始位置, 原字符串, 左边字符串) + UTF8.Len((左边字符串) 右边位置 = UTF8.InStr(起始位置, 原字符串, 右边字符串) 截取长度 = 右边位置 - 左边位置 If 左边位置 > UTF8.Len(左边字符) and 右边位置 > 0 Then 提取中间字符 = UTF8.Mid(原字符串, 开始位置, 提取长度) Else 提取中间字符 = "" End If End Function
- 用
Split
函数获取XY坐标
Split
:按指定的字符分割字符串成Array
数组 = Split(原字符串, 分隔符)
- 然后通过遍历
TracePrint
注释和Tap
坐标
编写代码
在之前写的框架中添加处理颜色组和坐标字符串的过程
编写好代码后基本拿《碧蓝航线》测试一下脚本:点击主线 -> 返回 -> 点击大型作战 -> 返回
源码:
Dim file_path, 颜色组, 读取结果, 遍历赋值_3, c, coordinate
file_path = "/sdcard/Pictures/test.txt"
读取结果 = File.ReadLines(file_path)
For Each i , j In 读取结果
遍历赋值_3 = i mod 4
// 打印注释
If 遍历赋值_3 = 1 Then
TracePrint j
// 提取颜色组字符串
ElseIf 遍历赋值_3 = 2 Then
颜色组 = 提取中间字符(j, chr(34), chr(34), 1)
// 获取坐标数组
ElseIf 遍历赋值_3 = 3 Then
coordinate = Split(j, ",")
End If
// 根据指定画面点击特定坐标
Do While 遍历赋值_3 = 0
Delay 1000
c = CmpColorEx(颜色组, 1)
If c = 1 Then
Tap coordinate[1], coordinate[2]
Exit Do
End If
Loop
Next
Function 提取中间字符(原字符, 左边字符, 右边字符, 起始位置)
Dim 左边位置, 右边位置, 提取长度
左边位置 = UTF8.InStr(起始位置, 原字符, 左边字符) + UTF8.Len(左边字符)
右边位置 = UTF8.InStr(左边位置, 原字符, 右边字符)
提取长度 = 右边位置 - 左边位置
If 左边位置 > UTF8.Len(左边字符) and 右边位置 > 0 Then
提取中间字符 = UTF8.Mid(原字符, 左边位置, 提取长度)
Else
提取中间字符 = ""
End If
End Function
debug
- 用
Call
调用函数时没有返回值 - 用
File.WriteLines
读取的数组下标是基于1
开始的,并且数组内的元素调用Split
函数生成的数组也是