按键精灵抓图脚本 新手教程——按键精灵脚本来模拟合成灯笼

11/27 21:13:11 来源网站:辅助卡盟网

按键精灵抓图脚本 新手教程——按键精灵脚本来模拟合成灯笼

下图是某游戏的合成灯笼界面,通过拖拽把相同的灯笼合成更高一级的灯笼。我想用脚本来自动合成,完全自动化。

红蜻蜓抓图精灵2009_按键精灵抓图脚本_红蜻蜓抓图精灵2011

下图是实现后的效果:

通过脚本大大提高合成速度!

其实这里并不是用到反编译和逆向的知识,只是用了按键精灵写了模拟合成的脚本,本篇文章就先讲按键精灵的使用吧,反编译的其他知识后面我会逐一分享,因为这个按键精灵也是我这段时间折腾的一部分。

进入正题

折腾吧。

环境要求与即将使用的工具

环境版本

操作系统

本人的mac是双系统(MacOSX和Win7),按键精灵脚本需要在Windows开发

红蜻蜓抓图精灵2011_红蜻蜓抓图精灵2009_按键精灵抓图脚本

按键精灵手机助手 for Windows

3.5.2

按键精灵iOS版

1.5.2

手机系统

iPhone7 iOS11 需要越狱

思路

一开始我的做法:

怎么让脚本知道是两个相同的灯笼,然后又怎么模拟灯笼拖拽去合并?我想到了按键精灵,早起用过电脑版的用来辅助游戏,想不到现在有手机版的了!所以想看看怎么弄,我基本也是从零学起的。

了解按键精灵 iOS 版可以模拟我们人手的任何触摸指令,我就有信心做这个合成判断了,按键精灵的代码是MQ语言,有相关手册大家可以去看。

思路是把 12 个灯笼区域分割成 12 个区域,坐标存放在数组中,然后拿每一个灯笼来和第一个灯笼比较特征,特征相同就触发模拟拖拽合并。

另一种做法:用冒泡算法不判断色点,简单粗暴每个格子都移动合并,不管是不是相同灯笼,没想到效率更高!代码更简单效率更快!

红蜻蜓抓图精灵2011_按键精灵抓图脚本_红蜻蜓抓图精灵2009

实现代码

这里只列出核心代码,具体代码见:github

()

ShowMessage "启动脚本。。。。。" // 横屏//x//|__ y Dim offsetX = 260Dim offsetY = 292 Dim CloseXPoint = array(988,2010)// 3 个特征点 array(y, x)Dim point1 = array(876, 760)Dim point2 = array(833,777)Dim point3 = array(894,757)// 第一个灯笼的特征Dim firstDengLong = array(array(point1(0), point1(1), GetPixelColor(point1(0), point1(1))), array(point2(0), point2(1), GetPixelColor(point2(0), point2(1))), array(point3(0), point3(1), GetPixelColor(point3(0), point3(1))) ) Dim dengLongArr = array() Dim i=0,count=0// 所有灯笼的比较坐标点,12个 [[[5,3],[3,1]] , [[5,3],[3,1]]]// 12 次循环For i = 0 To 2    dim j = 0    For j = 0 To 3        dengLongArr(count) = array()        // 类似 dengLongArr[count][0]        dengLongArr(count, 0) = Array(firstDengLong(0, 0) - i * offsetX, firstDengLong(0, 1) + j * offsetY)        dengLongArr(count, 1) = Array(firstDengLong(1, 0) - i * offsetX, firstDengLong(1, 1) + j * offsetY)        dengLongArr(count, 2) = Array(firstDengLong(2, 0) - i * offsetX, firstDengLong(2, 1) + j * offsetY)        count = count + 1    NextNext // 合并灯笼Function heBingDengLong()    i = 0    j = 0    // 第一个灯笼的特征    Dim firstDengLong = array(array(point1(0), point1(1), GetPixelColor(point1(0), point1(1))), array(point2(0), point2(1), GetPixelColor(point2(0), point2(1))), array(point3(0), point3(1), GetPixelColor(point3(0), point3(1))) )    Dim currDengLongColorArr = array()    // 11 次循环    For i = 0 To 11         currDengLongColorArr = array( GetPixelColor(dengLongArr(i,0,0), dengLongArr(i,0,1)), GetPixelColor(dengLongArr(i,1,0), dengLongArr(i,1,1)), GetPixelColor(dengLongArr(i,2,0), dengLongArr(i,2,1)))         For j = 1 To 11            closeX ()            closeComm()            TracePrint "这一点"            dim str = dengLongArr(j,0,0)&"|"& dengLongArr(j,0,1) & "|" & currDengLongColorArr(0) & "-101010," & dengLongArr(j,1,0)&"|"& dengLongArr(j,1,1) & "|" & currDengLongColorArr(1) & "-101010," & dengLongArr(j,2,0)&"|"& dengLongArr(j,2,1) & "|" & currDengLongColorArr(2) & "-101010"             If Not(i = j) and CmpColorEx(str, 0.9 ) = 1 Then                TracePrint      str & "找到没有" & i+1 & "->" & j+1                // 合并灯笼                heBingDengLongTouch (dengLongArr(i,0,0), dengLongArr(i,0,1), dengLongArr(j,0,0), dengLongArr(j,0,1))                //EndScript                //Exit For            Else                //TracePrint 0             End If        Next     Next End Function Function hebingDengLong2()    i = 0    j = 0    Dim temp    // 11 次循环    For i = 0 To 10        closeX ()        closeComm()         temp = i        For j = 0 To 10            heBingDengLongTouch (dengLongArr(temp,0,0), dengLongArr(temp,0,1), dengLongArr(j,0,0), dengLongArr(j,0,1))            temp = j        Next     NextEnd Function // 移动指定灯笼到第一位置Function moveToFirst(number)    TracePrint "----------------------------" & number    TouchDown dengLongArr(number-1,0,0),dengLongArr(number-1,0,1), 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1    TouchMove firstDengLong(0,0),firstDengLong(0,1), 1//将ID=2的触点花200毫秒移动至500,500坐标    TouchUp 1//松开弹起ID=1的触点    // TracePrint "移动力"End Function // 拖拽合并Function heBingDengLongTouch(x1, y1, x2, y2)    TracePrint "----------------------------"    TouchDown x1,y1, 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1    TouchMove x2, y2, 1//将ID=1的触点花200毫秒移动至500,500坐标    TouchUp 1//松开弹起ID=1的触点 End Function // 关Function closeX()    // 免费升级的点击    //各种弹层的关闭处理End Function Function closeComm()     // 也是各种弹层的关闭处理End Function Function isInGameWindow()    // 是否在游戏窗口的判断End Function // 广告处理Function adProcc()    // 各种广告处理。。。。    TracePrint "开始广告处理................"    // 存在倒计时形式的x按钮         // 误入横版的app store 显示页面End Function // 脚本主函数Function heBingDengLongMain()    For ii = 1 To 12    closeX ()    closeComm()    If hasShadowWindow() = False Then        // 原始的判断逻辑,效率低        hebingDengLong()        // 如果想用第二种合并处理逻辑的话,上面的For可以去掉,下面的moveToFirst()也要去掉        //hebingDengLong2()         moveToFirst (ii)    Else        TracePrint "不合并"    End If     Next End Function If isInGameWindow() = False Then    TracePrint "不在游戏界面"    ShowMessage "不在游戏界面"    Delay 2000    adProcc()Else    heBingDengLongMain()End If

    暂无相关资讯
按键精灵抓图脚本 新手教程——按键精灵脚本来模拟合成灯笼