小知识点合集4
- 您所在的用户组无法下载或查看附件
本文由按键学院提供技术支持
按键学院交流①群(已满):376122403
按键学院交流②群(已满):372671254
按键学院交流③群(快满):170084238
按键学院安卓①群:115768679
写脚本的时候,总有一些事与愿违的地方,一个不经意的小地方,可能会令我们寻找半天才发现并且解决,将我们平时碰到的积累起来,是一笔不小的财富,积少成多,跟着我记下书写脚本的点点滴滴吧。 |
- 您所在的用户组无法下载或查看附件
1.分支上的逻辑判断
最近收到了很多问题,有几个很类似的问题,大致内容如下:寻找到图1时,点击某个位置,寻找图2继续接下去的操作,如果没找到时则开始找图3。诸如此类的问题,涉及到逻辑判断语句,这也是自己写比录制的脚本要强大很多的最主要原因!那么我们来看下都是如何处理的。
说到逻辑判断,学习过的人立马反应过来,是If语句,虽然还有其他逻辑控制语句,但都大同小异,这没有错,然而当大量的判断语句不断的嵌套的时候,而一页代码又无法看完逻辑的时候,就产生了易错,不易改等问题。特别是中途含有网络操作,就必须有延时等待,也就是需要加入循环语句。当各种控制语句掺杂在一起,再好的眼睛也撑不住。
于是我们可以采取另外一个解决办法,虽然If等逻辑控制语句是免不掉了,但是却可以让逻辑上非常清晰,我们将涉及到分支的逻辑当杜写出来,并将所有的可能性全部列入,通过返回值的方式做逻辑上的处理。
我们来看看应用中的一个涉及到分支处理的功能是如何处理的,这里以QQ为例,我们知道QQ打开的时候,如果之前登陆过,就会自动登陆直接到消息界面,但是如果在其他地方登陆过,就会先出现账号密码的输入界面(即使已经帮你输入好),然后需要点一下登陆。也就是说,当我们打开QQ,可能立马就涉及到了分支,虽然我们可以让用户事先登陆好,但是如果能更加自动化不是更好吗?
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
如以上图,我们希望能进入到第二个图再往下操作,但是当打开QQ的时候有可能会出现第三个图,就需要再点次登陆。我们来看看代码如何写的:
- SetScreenScale 720,1280
- Function 进入QQ()
- Dim intX,intY
- Do
- Delay 200
- //寻找QQ图标并点击
- FindMultiColor 0,0,0,0, "FEFEFE-101010","60|8|201C1C-101010,78|0|FEFEFE-101010,28|43|122DE3-101010", 0, 0.9, intX, intY
- If intX > -1 And intY > -1 Then
- Tap intX,intY
- End If
- Delay 200
- If CmpColorEx("357|1204|BBADAB-101010,601|1210|BBADAB-101010,110|1223|FAB700-101010", 0.9) = 1 Then
- 进入QQ = "消息页面"
- Exit Do
- End If
- Delay 200
- If CmpColorEx("164|650|F3BA1F-101010,256|644|F3BA1F-101010,512|655|F3BA1F-101010", 0.9) = 1 Then
- 进入QQ = "登陆页面"
- Exit Do
- End If
- Loop
- End Function
- Function 点击登陆()
- Do
- Delay 200
- If CmpColorEx("164|650|F3BA1F-101010,256|644|F3BA1F-101010,512|655|F3BA1F-101010", 0.9) = 1 Then
- Tap 376,644
- End If
- Delay 200
- If CmpColorEx("357|1204|BBADAB-101010,601|1210|BBADAB-101010,110|1223|FAB700-101010", 0.9) = 1 Then
- Exit Do
- End If
- Loop
-
- End Function
- Function 进入QQ主页面()
- If 进入QQ() = "消息页面" Then
-
- ElseIf 进入QQ() = "登陆页面" Then
- Call 点击登陆()
- End If
- End Function
- Call 进入QQ主页面()
复制代码
虽然代码略为繁琐,并且肯定有人要吐槽,直接在进入QQ的那个函数里,将寻找到登陆的图标的时候直接点击一下登陆,直到寻找到主页面才退出,这样根本用不到分支判断,If语句都省了。 这个例子是可以这样没有错,但是我们需要考虑的不单单是这个地方,假如有一个界面A,含有两个分支,分别到界面B和界面C,界面B和界面C的下一步都是到界面D,但是处理的内容不同,这个时候,你还能简单的通过一个Do ... Loop解决吗?
脚本以稳定性最为关键,确保你的脚本运行时能完全对应当前界面才是最稳定的!
2.修改器
好吧,这个其实和按键精灵暂时并没有关联----但我还是要说~万一以后可以读写内存了呢? 这里,我使用烧饼修改器做一个简单的内存搜索(修改器在附件里下载),安装完并打开修改器(打开后窗口化),然后打开我们要读写内存的游戏。- 您所在的用户组无法下载或查看附件
我们打开游戏的人物属性面板,可以看到类似的信息,这个时候,记录下比较有特征的值,比如经验是71964,我们点下修改器的悬浮窗,搜索71964:
- 您所在的用户组无法下载或查看附件
很容易就获取到了这个值的地址,我们可以尝试着修改一下,我改成22222222~~~,我们看看修改的结果:- 您所在的用户组无法下载或查看附件
简单易懂,当然并不是所有的数据都那么好找,如果我的数值都不大,游戏中有非常多的数值相同的属性,那么有没有解决办法呢?当然有!那就是用联合搜索,我们再看看属性页面,不单单有当前经验,还有总经验,一般游戏数据的存放都是有规律的,这两个相关值在内存中一般也是在附近的,于是我们使用联合搜索:- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
这样搜索到的值就更符合我们想要的内容,当然这样的修改其实大部分情况并没有作用,因为网游的数据都是存放在服务器,修改本地内容并没有用,但是我们可以把它当做一个高效的判断方式,比如要识别元宝数量,做字库神马的,无论正确率还是效率都远远比不上内存读出来的数据。
是不是比想象的更简单呢!想知道更多请关注院刊系列!
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件