本文bilibili视频讲解链接:https://www.bilibili.com/video/BV1vZ4y137VN/
如何做到脚本通用
我见过很多上来就用默认分辨率开发的,或者分辨率正确,但是DPi不正确,最后导致反工。会有很多人问,为什么模拟器上面开发的,手机用不了。因为不同的设备,细节都是不一样的,粗看一模一样,实际上细节略有不同,特别是系统字体不一样,导致找字不生效的很常见。想要做到一次开发,处处通用,我们最好是选择分辨率720*1280,DPI 320的模板去开发。如果依旧不兼容,模拟器上正常,物理手机或者云手机不正常,那么就得在对应的设备上进行截图取色,这也是无奈之举,单纯靠降低相似度可能会带来各自问题,有条件的尽量选择100%色域的屏幕进行开发,提高准确度。
代码结构的布局
总体来说是要参照MVC模式来开发,即mode(模块),view(视图),control(控制)。我们写代码的时候,业务逻辑模块、视图模块和控制模块要分开写,下图是我的一个开发习惯,仅供参考,如有不正之处,请指出。
//收费代码
//-------------------------------------------------------------
Dim rsa公钥 = "-----BEGIN PUBLIC KEY-----\n"&_
"-----END PUBLIC KEY-----\n"
Dim rsa私钥 = "-----BEGIN RSA PRIVATE KEY-----\n"&_
"-----END RSA PRIVATE KEY-----\n"
INITELFKEYS rsa公钥, rsa私钥
//开启日志
//-------------------------------------------------------------
Log.Open
//导入插件
//-------------------------------------------------------------
Import "shanhai.lua"
//定义全局/共享变量
//-------------------------------------------------------------
Thread.SetShareVar "游戏监测", False
Thread.SetShareVar "清理背包", False
Thread.SetShareVar "拾取物品", False
Dim 寻路次数=0
//启动线程,一般是两条线程
//-------------------------------------------------------------
Thread.Start (主程序)
Thread.Start (定时器)
//死循环,程序走向控制
//-------------------------------------------------------------
While true
If Thread.GetShareVar("游戏监测") = true Then
If Thread.GetShareVar("清理背包") = true Then
Call 清理背包()
Thread.SetShareVar "游戏监测", False
Thread.SetShareVar "清理背包", False
ElseIf Thread.GetShareVar("拾取物品") = true Then
Call 拾取物品()
Thread.SetShareVar "游戏监测", False
Thread.SetShareVar "拾取物品", False
End If
End If
Delay 50
Wend
//线程一,启动主程序
//-------------------------------------------------------------
Sub 主程序()
While True
Call 防卡检测()
Delay 30
Call 怪物检测()
Delay 30
Call 拾取检测()
Delay 30
Wend
End Sub
//线程二,启动计时器
//-------------------------------------------------------------
Function 定时功能()
Dim cqjg=int(ReadUIConfig("输入框_重启间隔"))
Dim qljg=int(ReadUIConfig("输入框_清理间隔"))
Dim gjjg=int(ReadUIConfig("输入框_攻击间隔"))
Dim hcjg=int(ReadUIConfig("输入框_回城间隔"))
Dim bjjg=int(ReadUIConfig("输入框_补给间隔"))
Dim t1=time()
Dim t2=time()
Dim t3=time()
While true
If Time() - t1 >=cqjg and ReadUIConfig("多选框_定时重启") = true and Thread.GetShareVar("游戏监测") = False Then
t1 = Time()
TracePrint cqjg & "分钟已到,即将重启游戏"
ShowMessage cqjg & "分钟已到,即将重启游戏"
Thread.SetShareVar "游戏监测", true
Thread.SetShareVar "定时重启", true
ElseIf Time() - t2 >= hcjg and ReadUIConfig("多选框_定时回城")=true and Thread.GetShareVar("游戏监测") = False Then
t2 = Time()
TracePrint cqjg & "分钟已到,即将回城"
ShowMessage cqjg & "分钟已到,即将回城"
Delay 1000
Call 点击(50,495,1135)//使用回城
ElseIf Time() - t3 >= qljg and Thread.GetShareVar("游戏监测") = False Then
t3 = Time()
TracePrint qljg & "分钟已到,准备清理背包"
ShowMessage qljg & "分钟已到,准备清理背包"
Thread.SetShareVar "游戏监测", True
Thread.SetShareVar "背包检测", true
End If
Delay 100
Wend
End Function
//业务逻辑代码
//-------------------------------------------------------------
Sub 防卡检测()
TracePrint "检测"
End Sub
Sub 怪物检测()
TracePrint "检测"
End Sub
Sub 拾取检测()
TracePrint "检测"
End Sub
//常用的功能封装
//-------------------------------------------------------------
Function 找图()
TracePrint "找图"
End Function
Function 找色()
TracePrint "找色"
End Function
Function 找字()
TracePrint "找字"
End Function
Function 随机点击()
TracePrint "点击"
End Function
代码的书写规范
为了降低后期维护难度,以下工作是很有必要的
- 写注释主要是对功能说明,这段程序干什么的,最好把程序设计思路写上。
- 开启日志功能,并且每段程序输出调试信息
- 程序命名简洁明白,不要不中不洋,要么你全部中文命名,要么就全部英文命名,英文命名参照驼峰法。禁止出现如下命名方式:张three、lee四、wangfive,starfarming,pinyin
- 多用function替代重复出现的sub,减少不必要的的代码数量,增加代码的可读性,无脑sub不可取。
如何学习好按键精灵
思维活跃,举一反三,不要因为学习别人的东西限制了自己的思想。代码只是实现你想法的工具,而不是唯一方式,条条大路通罗马。