以前用雷电模拟器,没有问题.自从游戏大更新之后雷电,逍遥都进不去游戏了.改用了mumu模拟器.奇怪的问题一直时有时现.
它的具体情况就是模拟器画面在动.但小精灵输出的坐标颜色却一直不变.导致脚本卡住无法继续往下运行.脚本内的循环判断点击之类的功能一切正常.我写的防卡死方法也会调用.唯独就是所有涉及到找图,找色,截图,全出了问题. (找的全是以前的某一帧定格画面)
暂停脚本也可以暂停.继续脚本也没问题.(找的还是历史老图,点击,循环等代码功能一切正常)但点停止脚本按钮有时候会停不下来.点了停止按钮之后我写的屏幕输出会停下.但整个小精灵悬浮还是绿色运行状态.在点暂停就点不动了.仿佛已经卡死了..只能退了小精灵重开.偶尔重开的时候会加载不出来配置页面.只能通过重启模拟器来解决这个问题.
最先出现这个问题是我刚换mumu写完脚本用OBS全屏录像准备找脚本问题的时候,以前用雷电是没这个问题的.
我一般10开mumu然后跑脚本.录2,3个小时之后基本就要有2~3个模拟器出现这种情况.跟按键精灵的客服反映.他跑我的脚本和游戏.但他电脑只能1开.根本测不出来.
后来我发现只要别开录像.obs.英伟达自带的录像都不行.只要开了录像就容易出现这个问题.不开录像这个问题出现的概率小很多.
但是我发现当我更新脚本的时候.偶尔还是会出现这个问题.我始终搞不懂是为什么更新脚本后大概率会出现这种屏幕假卡死的情况.直到今天早上我不小心同步的时候点到了mumu的广告.十个模拟器全部安装了一个广告上的游戏.结果我跑脚本1个小时不到,又有2个模拟器出现了这种情况.那就跟按键精灵的更新没关系了.应该是模拟器里新装了APK之后就容易出问题.
我上网搜了一圈发现有
ReleaseCapture这个方法.能释放截图缓存.
我在防卡死代码中加了
ReleaseCapture 这个方法.结果截图还是偶尔会假卡死.
问了豆包说要配套使用.然后在方法开头就变成这样了
KeepCapture
Delay 50
SnapShot "/sdcard/Pictures/Screenshots/" & wen文件序号 & "-a.png"
ShowMessage "文件保存成功"
Delay 200
ReleaseCapture
用了这个方法我已经快半个月没出现假卡死的情况了.但是今天同步的时候不小心点广告安装了10个游戏,还是出现了假卡死的情况.正好有截图.我去看截图发现确实是游戏还在运行时的图片.而真正的模拟器画面是模拟器的桌面.(我的程序找不到游戏内的按钮重试15次找不到会kill掉游戏进程,然后判断是否是回到模拟器桌面.然后在启动游戏app,结果就是小精灵吧游戏关了.然后一找图,发现不是桌面,还在游戏里.就不启动游戏,程序就一直卡在桌面那步不动了.)
我吧图片删了.不一会我的小精灵又把那张游戏内的图原封不动的截回来了.小精灵的识图功能应该是卡死了
而且我还发现这个ReleaseCapture 方法成对配合是没什么问题的
一旦多次单独调用及其容易出现假卡死情况.
识图几乎是必卡死 像这种嵌套调用↓
Sub a
ReleaseCapture
//识图,找游戏内装备
Call b()
End Sub
Sub b
ReleaseCapture
//识图,找装备等级
End Sub
我当时以为这个方法能强制让识图功能去抓模拟器最新的画面.在很多方法里都加了.结果脚本识图卡死的很彻底.
我问了下豆包.豆包又说让我加上
FindColor 9999,9999,9999,9999,"#FFFFFF",0,0,x,y
这种取非法坐标外的方法.说是会强制刷新识图缓存啥的....我估计也没用.
这是豆包的回答
为什么 正常取色 / 正常找图 破不了,只有「非法超限指令」能破?
按键精灵手机版底层逻辑:
- 合法范围请求(0,0~ 宽高内)
→ 走缓存加速通道
→ 优先读旧纹理,不请求模拟器新画面
- 非法 / 超限 / 错误参数请求
→ 缓存里没有对应数据
→ 直接废弃当前绑定的旧纹理缓冲
→ 强制重新向模拟器渲染服务新建拉流
→ 才会拿到真实最新画面
有没有人遇到过这种问题有解决办法的??