前言
本章讲述脚本编写前的一些通用方法的整合,以及一些注意事项,例如:多屏幕适配、随机点击、随机滑动、图色方法、文字识别等通用方法的封装。
通用方法
下面是我个人比较喜欢使用的通用方法:
Dim 比例系数X,比例系数Y,区域系数,当前分辨率 = "未知"
Dim intX,intY,颜色数量,返回值,isLogOpen,识别文字
Call 分辨率初始化()
Delay 2000
// ****************************************************** 业务下面写
// 点击这样写
Tap10 100, 100 //在横坐标 纵坐标中 +-10 的范围随机点击
If 指定区域颜色是否大于给定值(646,1211,702,1258, "6392B5-101010", 1.0, 188) Then
//发现颜色值满足条件
End If
// 等等等。。。。
// ****************************************************** 自用功能
Function 输出(内容)
TracePrint 内容
ShowMessage 内容
End Function
Sub 分辨率初始化()
Dim 屏幕横坐标X,屏幕纵坐标Y
SetControlBarPos 0,0 //把悬浮窗移动到屏幕右上角
TracePrint SetDictEx(0, "Attachment:wendao.txt")//设置附件中的s1.txt文档为1号字库
TracePrint UseDict(0)//这里开始切换到2号字库进行识别
屏幕横坐标X=GetScreenX()
屏幕纵坐标Y = GetScreenY()
比例系数X = 屏幕横坐标X / 720
比例系数Y = 屏幕纵坐标Y / 1280
区域系数 = ((100 * 比例系数X) * (100 * 比例系数Y)) / (100 * 100)
Thread.SetShareVar "比例系数X", 比例系数X
Thread.SetShareVar "比例系数Y", 比例系数Y
Thread.SetShareVar "区域系数", 区域系数
TracePrint "比例系数分别为:"&比例系数X&"---"&比例系数Y
TracePrint 屏幕横坐标X,屏幕纵坐标Y
If 屏幕横坐标X = 720 And 屏幕纵坐标Y = 1280 Then
当前分辨率 = "1280"
ElseIf 屏幕横坐标X = 1080 And 屏幕纵坐标Y = 1920 Then
当前分辨率 = "1920"
ElseIf 屏幕横坐标X = 1440 And 屏幕纵坐标Y = 2560 Then
当前分辨率 = "2560"
End If
If Round(屏幕纵坐标Y / 屏幕横坐标X, 1) = 1.8 Then
//16:9比例屏幕适配
If 屏幕横坐标X <> 720 Then
TracePrint "设置等比例缩放"&Round(屏幕纵坐标Y / 屏幕横坐标X, 1)
SetScreenScale 720,1280,0
End If
ShowMessage "欢迎使用清风★问道辅助,您当前屏幕分辨率为"&屏幕横坐标X&"*"&屏幕纵坐标Y&"属于辅助支持范围~"
Delay 2000
If 屏幕横坐标X < 720 Then
ShowMessage "您的屏幕小于720*1280部分功能无法正常使用~"
Delay 2000
End If
Else
//这里要搞一套 5:3 的比例
ShowMessage "您当前屏幕分辨率为" & 屏幕横坐标X & "*" & 屏幕纵坐标Y & "辅助暂不支持,非常抱歉~!"
Delay 2000
ShowMessage "您当前屏幕分辨率为" & 屏幕横坐标X & "*" & 屏幕纵坐标Y & "辅助暂不支持,非常抱歉~!"
Delay 3000
EndScript
End If
End Sub
Function 等待颜色出现(x1, y1, x2, y2,色值,相似度,颜色数量,等待时间)
等待颜色出现 = False
Dim i
For i = 0 To 2*等待时间
Delay 500
If 指定区域颜色是否大于给定值(x1, y1, x2, y2, 色值, 相似度, 颜色数量) Then
等待颜色出现 = True
Exit For
End If
Next
End Function
//识别数字
Function 清风识别数字(x1,y1,x2,y2,色值,相似度)
清风识别数字 = ""
Dim 返回的字,比例x,比例y
比例x = Thread.GetShareVar("比例系数X")
比例y = Thread.GetShareVar("比例系数Y")
If GetScreenX() = 720 Then
返回的字 = SmartOcr(x1, y1, x2, y2, 色值)
If 返回的字 = "" Then
返回的字=Ocr(x1,y1,x2,y2,色值,相似度)
End If
Else
返回的字=Ocr(Int(x1*比例x),Int(y1*比例y),Int(x2*比例x),Int(y2*比例y),色值,相似度)
End If
清风识别数字 = 返回的字
End Function
//按照比例判断給定区域颜色值是否大于多少
Function 指定区域颜色是否大于给定值(x1, y1, x2, y2, 颜色值, 相似度,是否大于xxx)
Dim 数量,比例x,比例y,比例区域
比例x = Thread.GetShareVar("比例系数X")
比例y = Thread.GetShareVar("比例系数Y")
比例区域 = Thread.GetShareVar("区域系数")
指定区域颜色是否大于给定值 = False
数量 = GetColorNum(x1*比例x,y1*比例y,x2*比例x,y2*比例y, 颜色值, 相似度) //卷轴开启
// TracePrint "实际数量:"&数量
If 数量 > 0 Then
// TracePrint "比例需求数量:"&区域系数 * 是否大于xxx
If 数量 > 区域系数 * 是否大于xxx Then
指定区域颜色是否大于给定值 = True
End If
End If
End Function
Function 区域读取数字(x1,y1,x2,y2,色值)
区域读取数字 = "无"
Dim 字,比例x,比例y
比例x = Thread.GetShareVar("比例系数X")
比例y = Thread.GetShareVar("比例系数Y")
字 = SmartOcr(x1*比例x,y1*比例y,x2*比例x,y2*比例y, 色值)
If 字 <> "" Then
区域读取数字 = 字
End If
End Function
Function 指定区域找图(x1, y1, x2, y2, 图片名称, 色差, 模式, 相似度)
Dim 比例x,比例y,比例区域,返回值
比例x = Thread.GetShareVar("比例系数X")
比例y = Thread.GetShareVar("比例系数Y")
返回值 = FindPic(x1 * 比例x, y1 * 比例y, x2 * 比例x, y2 * 比例y, 图片名称, 色差, 模式, 相似度, intX, intY)
指定区域找图 = 返回值
End Function
Function 清风找图(x1, y1, x2, y2, 图片名称,偏色, 相似度,查找时间) //秒为单位 1s查找10次
Dim i,j,pic,图片名称s=""
pic = Split(图片名称, "|")
If UBOUND(pic) > 0 Then // 说明有两张以上的图片
For j = 0 To UBOUND(pic)
图片名称s = 图片名称s & "Attachment:"&pic(j)&".png" & "|"
Next
图片名称s = Left(图片名称s, Len(图片名称s) - 1)
Else
图片名称s = 图片名称
End If
清风找图 = False
For i = 1 To 查找时间 * 10
FindPic x1, y1, x2, y2, 图片名称s, 偏色, 0, 相似度, intX, intY
If intX > -1 Then
清风找图 = True
Exit For
End If
Delay 100
Next
End Function
Function TapDefult(x, y)
TapE x, y, 5, 5
End Function
Function Tap10(x,y)
TapE x, y, 10, 10
End Function
Function TapButton(x,y)
TapE x, y, 10, 40
End Function
Function TapE(x, y, mx,my)
Dim rndX,rndY,de
rndX = Int(mx * Rnd() + 1)
rndY = Int(my * Rnd() + 1)
de = Int(4 * Rnd() + 1)
If de = 1 Then
x = x - rndX
y = y - rndY
ElseIf de = 2 Then
x = x + rndX
y = y + rndY
ElseIf de = 3 Then
x = x - rndX
y = y + rndY
ElseIf de = 4 Then
x = x + rndX
y = y - rndY
End If
// TracePrint "输出坐标:" &x &"," &y
Tap x, y
End Function
Function Swipe5(x1, y1, x2, y2, t)
SwipeE x1, y1, x2, y2, t,5
End Function
Function SwipeE(x1, y1, x2, y2, t,mt)
Dim rndX,rndY,de
rndX = Int(mt * Rnd() + 1)
de = Int(4 * Rnd() + 1)
If de = 1 Then
x1 = x1 - rndX
y1 = y1 - rndX
x2 = x2 - rndX
y2 = y2 - rndX
ElseIf de = 2 Then
x1 = x1 + rndX
y1 = y1 + rndX
x2 = x2 + rndX
y2 = y2 + rndX
ElseIf de = 3 Then
x1 = x1 - rndX
y1 = y1 - rndX
x2 = x2 + rndX
y2 = y2 + rndX
ElseIf de = 4 Then
x1 = x1 + rndX
y1 = y1 + rndX
x2 = x2 - rndX
y2 = y2 - rndX
End If
Swipe x1, y1, x2, y2, t
End Function
Function TouchMoveE(x,y,mx,my,mark,t)
Dim rndX,rndY,de
rndX = Int(mx * Rnd() + 1)
rndY = Int(my * Rnd() + 1)
de = Int(4 * Rnd() + 1)
If de = 1 Then
x = x - rndX
y = y - rndY
ElseIf de = 2 Then
x = x + rndX
y = y + rndY
ElseIf de = 3 Then
x = x - rndX
y = y + rndY
ElseIf de = 4 Then
x = x + rndX
y = y - rndY
End If
TouchMove x, y, mark, t
End Function
Function TouchDownE(x,y,mx,my,mark)
Dim rndX,rndY,de
rndX = Int(mx * Rnd() + 1)
rndY = Int(my * Rnd() + 1)
de = Int(4 * Rnd() + 1)
If de = 1 Then
x = x - rndX
y = y - rndY
ElseIf de = 2 Then
x = x + rndX
y = y + rndY
ElseIf de = 3 Then
x = x - rndX
y = y + rndY
ElseIf de = 4 Then
x = x + rndX
y = y - rndY
End If
TouchDown x,y, mark
End Function
待更新。。。。敬请期待。。。