本帖最后由 TC兔子 于 2015-4-17 13:54 编辑
由于身体原因,有很久一段时间没有写代码,更顾不上写教程。趁着这次5.0发布,写点简单的教程,给想学习的朋友。刚开始用的是我自己的手机,过两天再说怎么连接模拟器来写。靠谱助手,海马玩,天天,自己百度吧。 仅限新手朋友观看,老鸟们就绕道吧,我这水平已经跟不上你们的节奏了!
请注意:代码没有进行复杂处理,只支持480*720分辨率的手机。如有不适,请自行截图。
免责声明:本文章仅仅个人娱乐,请勿用于商业用途,如有游戏封号等一切不良后果,请自负!
首先,简单说下几个找图的api findpic:就是按顺序找图,找到了就返回。如果你有好几个图片“rc:pic1.bmp|rc:pic2.bmp|......”,假如屏幕中有pic2, pic3,那么,当他找到pic2的时候,他就返回了,不再去找pic3。所以,如果仅仅只需要找一张图,用这个函数比较好。 他的返回值是:图片的索引号。 findpics:这个是findpic的双胞胎兄弟,他也是只找一张图片,第一张找到的图片。但是他的区别是,他的返回值是:图片的名称。 findpicex:这个函数就不一样了,他能找多个图片,并且把所有找到的图片都返回给你。 这里就有问题了,他返回的都是什么信息?如何处理? 他的返回值是:图片的索引号,x坐标,y坐标。这个图片索引号就是你给他的图片的顺序,不过他是从0开始计数的。 还有需要注意的就是,如果找图界面中同时出现几个要找的图片,那么他都会把这些坐标信息反馈在返回值里,区别就是他们的坐标不同。 findpicexs:这还用讲么,就是把索引号换成文件名了。 第二,实用找图api 新建一个安卓项目 双击项目就可以看到 - function floatwinrun()
- //浮动窗口运行按钮执行的事件,如果不需要可去掉
- messagebox("你好世界")
- end
复制代码
这个函数,就是你在手机上点击运行按钮时执行的内容 点击以后会出现 需要注意的是:这个函数本身就是一个线程函数,如果需要加入while,for不需要再重新开线程了。可以直接使用。 想找图得有工具吧,TC自带图色助手: 打开以后就可以看到以下界面
如果向知道具体啥用,自己去点点吧,反正坏不了你的电脑。
说正经的,用图色助手截图吧
这是我截取的几个图片,没有全部列出来。
上代码
- var winh, winw
- var picnamearray = array("rc:endless.bmp", "rc:friend.bmp", "rc:buyitem.bmp", "rc:attack.bmp", "rc:dead.bmp", "rc:rewoard.bmp", "rc:continue.bmp")
- function floatwinrun()
- //浮动窗口运行按钮执行的事件,如果不需要可去掉
- // messagebox("你好世界")
- sysgetscreen(winw, winh)
- main()
-
- end
- function main()
- var totalstring = picnamearray[0]
- var totallen = arraysize(picnamearray)
- for(var i = 1; i < totallen; i++)
- totalstring = totalstring & "|" & picnamearray[i]
- end
-
- var retstr, retstrarraylen
- var retstrarray //定义变量
- var retx = 0, rety = 0
- while(true)
- retstr = findpicex(0, 0, winw, winh, totalstring, "151515", 0.9, 0) //使用了找多图的函数
- if(strlen(retstr) > 0)
- retstrarraylen = strsplit(retstr, "|", retstrarray) //获得数组的长度,并且进行分割
- traceprint(retstrarraylen)
- if(retstrarraylen == 1) //如果数组长度为1,则意味着只找到了一个图片,没有选择性,只需要进行点击
- var picpos
- traceprint(retstrarray[0])
- strsplit(retstrarray[0], ",", picpos) //再次分割找到图片的位置
- retx = cint(picpos[1])
- rety = cint(picpos[2])//这里方便新手看,多加了两步
- tap(retx, rety)
- waitcondition(picnamearray[cint(picpos[0])], false) //这个是一个等待点击结果,具体后面再解释
- elseif(retstrarraylen == 2)
- var picpos
-
- for(var i = 0; i < 2; i++)
- strsplit(retstrarray[i], ",", picpos)
- if(picpos[0] == "3")
- retx = cint(picpos[1])
- rety = cint(picpos[2])//这里方便新手看,多加了两步
- tap(retx, rety)
- waitcondition(picnamearray[cint(picpos[0])], false)
- end
- end
- end
- else
- traceprint(retstr)
- end
-
- sleep(300) //例行等待,不用占用太多资源
- end
- end
- ////////////////////////////////////
- //等待状态,判断是否继续
- //参数:1.图片名字;2.是否存在;3.等待时长
- ///////////////////////////////////
- function waitcondition(name, trueorfalse, longtime=50)
- var rets=-1, retx = 0, rety = 0
- for(var i = 0; i < longtime; i++)
- rets = findpic(0, 0, winw, winh, name, "102030", 0.9, 0, retx, rety)
- if(trueorfalse)
- if(rets >=0 )
- break
- end
- else
- if(rets < 0)
- break
- end
- end
- sleep(100)
- end
- end
复制代码
|