> 文档中心 > 蚂蚁森林拯救能量之AutoJs实现

蚂蚁森林拯救能量之AutoJs实现

蚂蚁森林拯救能量之AutoJs实现

  • 前言
  • 一、先上效果图
  • 二、脚本思路
  • 三、具体实现
  • 总结

前言

  它来了,它来了,你被偷的能量回来了!
  前阵子我写了一篇用AutoJs去收蚂蚁森林能量的文章(这是链接),而蚂蚁森林自动收能量的文章网上一搜一大把,写它单纯是闲着无聊,就是玩儿~
  但是!
  在我那篇文章发出去的几天后,蚂蚁森林就把收完能量的页面更新为拯救能量的入口了,虽然拯救能量已经出来有一段时间了,但是之前没有去关注它,这次的更新又勾起了我写脚本的念头,这估计是整个CSDN第一篇自动拯救能量的文章,甚至我在百度都没有找到有相关的自动化拯救能量,于是有了这篇文章,我感觉这次站在了改革开放的风口上!

最新版本:https://blog.csdn.net/weixin_44337681/article/details/121062515


一、先上效果图

我点我点我点我点我点我点!

二、脚本思路

  其实说来也简单,因为我之前写过那个自动收能量的文章,这样就知道该用哪个颜色去进行找色,然后只需要在固定的区域去找色并点击就可以实现自动拯救能量了,果然自动点比我手动点收得多,下面说一下步骤:

  1. 检测到能量收集完毕,并出现拯救能量页面入口,点击进入;
  2. 页面会有一个三秒倒计时,然后开始下落能量球,所以我们在特定区域循环找色,当区域内尚未出现能量球颜色则一直阻塞住;
  3. 当出现能量球颜色时,进入下一个循环,开始在特定区域内获取颜色坐标点,然后粗略修正后点击坐标,收取能量球;
  4. 多次找不到能量球颜色时,代表拯救能量游戏结束;
  5. 下图方框内的就是我们的找色区域,由于页面背景并没有与之相似的颜色,所以一旦出现我们找的颜色,则代表能量球进入,获取坐标点成功后,不能够直接点击坐标点,因为在截图与找色过程中,能量球已经离开该坐标点了,经过我的测试,我的手机在获取到坐标点时,大概点击坐标点下方130px的地方会有比较好的效果,可能不同的手机存在不同的效果,大家可能根据实际情况调整

三、具体实现

  代码里会有一些关于坐标的测算,但是只基于我的p30pro,估计其他手机会有些许差异:

/**     * 拯救消失的能量球     * 观察能量球下落过程  发现大致有五条下落轨道     * 首先截图能量拯救页面  测量能量球直径135px(不知道别的手机会不会不一样)     * 截图测量发现  能量球1s大约下落650px  就是1ms -> 0.65px     * 在五条轨道的范围内进行区域找色     */    function rescueEnergy(){ console.info("开始拯救消失的绿色能量"); randomClickBounds(findViewByClassAndText("android.view.View","开始拯救绿色能量")); delay(3); console.info("开始收取能量"); var image, point; //该doWhile循环是用来检测能量球是否开始进入检测区域的  没有发现能量球之前会一直阻塞 do { //截图     image = captureScreen();     //找色     point = findColor(image, "#ffc2ff01",{threshold: 4,region : [100, 500, 900, 150]}); } while (!point); //发现能量球之后  就进入该循环  收取能量球  当连续3次截图未发现能量球就结束循环 var errorCount = 0; while (true) { //ff128900 能量球字体的颜色     image = captureScreen();     point = findColor(image, "#ffc2ff01",{region : [100, 650, 900, 200]});     if (point) {     //找色成功  点击能量球坐标点下方130px  errorCount = 0;  click(point.x, (point.y + 130));  console.log("拯救能量 : "+point);  continue;     }     if (++errorCount > 3) break; } console.info("拯救能量结束");    }

总结

  没想到吧,代码居然这么少,因为这个功能是跟上一篇自动收能量的脚本写在一起的,所以其它代码我就不发两遍了,感兴趣的朋友可以点击这里看看。
  也许细心的程序猿们会发现我的动图在倒数5s的时候就结束了,其实是因为在最后5s的时间里,手机会出现严重的掉帧,会导致一些能量球不能被成功收取,我本打算开个子线程在找色区域的下方进行一个补偿点击,但是困于我对AutoJs的多线程还不够了解,出现了一些我没见过的异常,于是我放弃了,以后找到办法再修改它。觉得不错的话,可以点个赞支持一下哈~
关注我的专栏,一起对生活中的APP下手吧。未经允许,请勿转载。
本文链接:https://blog.csdn.net/weixin_44337681/article/details/117197516