首先我用按键精灵窗口里面的抓抓功能取点,取第一张图片中第一个灯笼“SKR”的特征,我采用三个色点来作为一个灯笼的特征。
第一个单元的 3 个特征点坐标:
Dim point1 = array(876, 760)
Dim point2 = array(833,777)
Dim point3 = array(894,757)
然后
Dim offsetX = 260
Dim offsetY = 292
指的是 12 个格子单元的横纵距离,也叫格子与格子之间的偏移量吧,这个是根据屏幕分辨率来算的,大屏小屏的手机是不同的。
我这个脚本没有做到适应多屏幕兼容,按键精灵有自动兼容多分辨率的函数,我就没实现了,是用的 iPhone7 Pro 的1920×108 的分辨率,换个手机就不准了哦。这里主要讲思路。
firstDengLong 是指第一灯笼的特征。
然后下面有一个嵌套 For 循环,就是通过偏移量算出 12 个格子的坐标点,用来比色的点。放在 dengLongArr 数组里面。
然后翻代码看最底部。
isInGameWindow()是判断当前窗口是否在游戏界面,先讲是的情况,会进入到 heBingDengLongMain()就是合并灯笼的主主函数。
首先执行 closeX ()和 closeComm()是为了关闭游戏界面的离线收益遮罩层,因为经常会弹出翻倍和升级提示的窗口按键精灵制作脚本教程,不关闭触摸就失效了。总之人的操作是什么顺序逻辑的,脚本也是根据各种情况来做判断的。
然后进入具体合并逻辑hebingDengLong(),通过数组的遍历,逐个拿出来和第一个灯笼的特征比较,如果特征一样证明是相同级别的灯笼可以合并。
模拟拖拽的代码就在heBingDengLongTouch()里面,知道源坐标点和目的坐标点就能实现拖拽啦。
核心就是每一个灯笼来和第一灯笼比较。合并后再在heBingDengLongMain()里面有一个 moveToFirst (ii) 的操作,就是保证每个灯笼有机会移动至第一个格子,有被拿来比较的机会。
虽然是实现了,但是效率太低,后面我用了另外的代码实现,不需要比较特征,简单粗暴高效的做法,不判断是否相同灯笼,直接每每合并得了,反而更快!代码在 hebingDengLong2()方法里面。类似冒泡算法。
不在游戏窗口的情况时就判断是否在看广告的界面的处理,经常会误点击到广告,或者某些升级灯笼的弹窗需要来看广告提高进度,是一种判断策略吧,某些广告看了收益高某些广告弹窗就直接 close X 掉。
然后广告处理部分也是抓取关闭按钮特征来判断,具体代码见 github。
额外
shell 定时任务
其实上面的动图之所有每隔几秒都有离线收益拿是因为我利用了游戏的一个bug 实现的,这里我就不透漏 bug 了,我手机里面运行着 shell 的定时任务的脚本才能每隔几秒就收获离线收益。
这里我分享一下 iOS 手机里面怎么使用定时任务吧。
linux 的定时任务是通过 crontab 来配置的,而 iOS 是通过 LaunchDaemons 来实现的。配置文件写在/Library/LaunchDaemons/下面。
比如我的配置文件(com.apple.mycrontest.plist)这样定义:
<plist version="1.0">
<dict>
<key>Labelkey>
<string>com.apple.mycrontest.pliststring>
<key>ProgramArgumentskey>
<array>
<string>/bin/bashstring>
<string>/var/root/myshelltest.shstring>
array>
<key>StartIntervalkey>
<integer>1integer>
dict>
plist>