按键精灵安卓/IOS脚本手机版2.5基础教程
9.日志、分辨率、多线程
1. 日志 你辛苦的做完了一个脚本,并且在自己的电脑或者手机上运行完美时,满心欢喜的丢给别人用,却发现各种问题,而对方又无法描述清楚的时候,很着急有没有!别急,你不懂,但是他懂啊----日志,我们打开命令大全看看怎么使用:- 您所在的用户组无法下载或查看附件
只有两个命令,一个开启日志,一个关闭日志。前面说过的TracePrint没忘吧!这个绝对好用啊,请想起来一次用一次,因为日志记录的就是TracePrint的信息,只要在脚本一开始的地方添加Log.Open,结束的地方添加Log.Close,就可以将你脚本中所有的TracePrint的信息记录到一个文本上,你只需要让用户将这个文本发给你,就很方便的找到卡住的地方加以修正。 还是写来测试看看吧:- Log.Open
- TracePrint "test"
- TracePrint GetTempDir()
- Log.Close
复制代码 我们在一开始开启了日志记录,在最后关闭日志记录,中间还有两个TracePrint语句,分别输出字符串和按键精灵安卓版的目录,那么日志文件就是记录这两句输出,我们打开文件管理器,找到日志文件:- 您所在的用户组无法下载或查看附件
打开他,我们可以看到一个含有当前时间的日志文件,我们将它移动至桌面,使用记事本打开就可以看到信息:- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
如果是想成为按键作者的,请务必使用日志记录啊(亲身经历有木有,没加日志的时候解决问题那叫一个痛苦,满眼都是泪啊)2. 分辨率 当你辛苦的做完了一个脚本,并且在自己的电脑或者手机上运行完美时,满心欢喜的丢给别人用,却发现各种问题(这段话好眼熟- -),其中很大的可能性都来自于同一个----分辨率问题。这种情况在模拟器上还好解决,但是到手机上就不好解决,手机分辨率众多,而且游戏也不完全以拉伸方式来填充屏幕。但是没有办法创造办法也要上不是,因此SetScreenScale诞生了,适合用在同一个屏幕比例的设备,比如1280*720与1920*1080都是16:9的屏幕。那么在1280*720的设备上做的脚本,在1920*1080的设备上也大部分能用(如果均用的多点比色,多点找色,并且取点的颜色的位置尽量取大片颜色的正中央,小部分的情况是界面并不以同比例拉伸,这种情况要分开做),不同比例的设备暂时没有好的解决办法,只能不改变逻辑的情况下重新获取颜色坐标写一遍。
如果使用了找图的方式,那么在需要制作多个分辨率的同一个图,不能使用SetScreenScale来自适应。比如我使用720*1280分辨率进行开发,那么就在开头写上:
使用SetScreenScale能节约大量的时间,我们不妨先直接使用,然后写好之后再使用不同分辨率的设备进行调试,界面不是等比例变化的再分开去写。
3. 多线程 相信很多童鞋对那种时不时弹出来的窗口深痛欲绝(网络连接失败之类的)。由于他的不确定性,我们很难在适当的时候去处理他(每个联网的地方都去检测很麻烦不是),那么我们可以用多线程来解决这个问题,多线程相当于多个大脑,可以同时做不同的事情,我们可以一个线程用来运行脚本内容,一个线程用来检测超时,这里我们写个简单的多线程检测:- Dim 检测线程
- Thread.SetShareVar "是否卡主", false
- 检测线程 = Thread.Start(test_thread)
- Do
- Delay 500
- If Thread.GetShareVar("是否卡主") = true Then
- TracePrint "卡着超过10秒,结束线程"
- Thread.Stop(检测线程)
- TracePrint "退出脚本"
- EndScript
- End If
- Loop
- Sub test_thread()
- Dim 起始颜色 = GetPixelColor(109,298)
- Dim 秒数 = 0
- Do
- Delay 1000
- Dim 结束颜色 = GetPixelColor(109,298)
- If 起始颜色 = 结束颜色 Then
- 秒数 = 秒数 + 1
- If 秒数 > 10 Then
- Thread.SetShareVar "是否卡主", true
- Exit Do
- End If
- TracePrint "界面已经" & 秒数 & "秒没变了"
- Else
- TracePrint "界面变化了,说明脚本还在正常运行"
- 起始颜色 = GetPixelColor(109,298)
- 秒数 = 0
- End If
- Loop
- End Sub
复制代码 点击运行后,我们发现界面不动的时候就开始不断的计时,一旦变化了,就重新开始计时,当计时超过设置的秒数时,脚本就退出了线程:- 您所在的用户组无法下载或查看附件
脚本的逻辑很简单,我们取一个坐标,不断的判断这个坐标的颜色,如果这个坐标颜色长时间没变,那么我们就认为卡住了。(可以判断多个点提高准确性)。已经大学了,我就不再贴命令大全的图了,学会自己去看吧!
线程的启动停止都好理解,但这里的共享变量使用的方法让我们感到疑惑,我们一开始是用Dim来设置变量的,但是线程却不是,这说明,Dim设置的变量其实只是一个线程的变量,而Thread.SetShareVar才是真正的全局变量。学到了!记下来!
多线程容易造成抢资源,造成手机卡顿,因此使用需要谨慎,使用时可以尽量减少其中一个线程的耗时操作,比如找图找色,最好只用来修改变量。